Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 475 476 [477] 478 479 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#7141
,
|
|
|
|
|
Сообщ.
#7142
,
|
|
|
|
Цитата [S]mike @ Но иметь представление о паттернах нужно. Безусловно. Но проектировать нужно в первую очередь исходя из требований, а не притягивать за уши известные и не очень паттерны. Впрочем, это уже оффтоп. |
|
Сообщ.
#7143
,
|
|
|
|
Цитата MyNameIsIgor @ Не до конца уверен, что понимаю Qraizer'а, но судя по всему он имел в виду operator new. насколько я понимаю порядок такой: оператор Child::new(); заполняем VMT указателями на методы Base() Base() заполняем VMT указателями на методы Child() Child(); Так ?? |
|
Сообщ.
#7144
,
|
|
|
|
Цитата jack128 @ Так ?? Нет. 1. Выделяет память нужного размера. 2. Вызывает поверх выделенного куска нужный конструктор класса. |
|
Сообщ.
#7145
,
|
|
|
|
Цитата jack128 @ оператор Child::new(); заполняем VMT указателями на методы Base() Base() заполняем VMT указателями на методы Child() Child(); Так ?? Ну, только не заполняем VMT, а проставляем указатель на соответствующий VMT, который один на тип. Добавлено Цитата Flex Ferrum @ Нет. 1. Выделяет память нужного размера. 2. Вызывает поверх выделенного куска нужный конструктор класса. Это по Стандарту так. В реализациях всё же есть vtbl. |
|
Сообщ.
#7146
,
|
|
|
|
Цитата MyNameIsIgor @ В реализациях всё же есть vtbl. Это ответственность конструктора, а не оператора new. |
|
Сообщ.
#7147
,
|
|
|
|
Цитата Flex Ferrum @ Это ответственность конструктора, а не оператора new. Так а вроде jack128 и не говорил, что new. Просто перечислил по шагам. |
|
Сообщ.
#7148
,
|
|
|
|
Цитата MyNameIsIgor @ Так а вроде jack128 и не говорил, что new. Просто перечислил по шагам. Тогда у Джек'а совсем неправильная логика. Потому что никакого Child::new() не вызывается. |
|
Сообщ.
#7149
,
|
|
|
|
Цитата Flex Ferrum @ Тогда у Джек'а совсем неправильная логика. Потому что никакого Child::new() не вызывается. А откуда материализуется память? |
|
Сообщ.
#7150
,
|
|
|
|
Цитата MyNameIsIgor @ А откуда материализуется память? Внезапно её возвращает operator new(). Ты его никогда не реализовывал самостоятельно? new не инициализирует объект. Он только память под него выделяет. А инициализирует всё так же конструктор. |
|
Сообщ.
#7151
,
|
|
|
|
Цитата Flex Ferrum @ никакого Child::new() не вызывается Цитата Flex Ferrum @ Внезапно её возвращает operator new() Очевидно, что это внезапно только для того, кто пишет такие взаимоисключающие параграфы. Цитата Flex Ferrum @ new не инициализирует объект. Он только память под него выделяет. А инициализирует всё так же конструктор. Спасибо, конечно, кэп, но мы знали, ага... |
|
Сообщ.
#7152
,
|
|
|
|
MyNameIsIgor, ну тогда пиши свой правильный вариант.
|
|
Сообщ.
#7153
,
|
|
|
|
Цитата Flex Ferrum @ MyNameIsIgor, ну тогда пиши свой правильный вариант Правильный вариант чего? На вопрос jack128 я ответил. |
|
Сообщ.
#7154
,
|
|
|
|
Цитата Flex Ferrum @ Это ответственность конструктора в коде конструктора никаких заполнений указателей на VMT нету. значит компилер сам как то выставляет этот указатель. что технически мешало сделать так: вызов оператора Child::new() указатель на VMT = VMT класса Child() Base() Child() ? |
|
Сообщ.
#7155
,
|
|
|
|
Цитата jack128 @ что технически мешало сделать так: вызов оператора Child::new() указатель на VMT = VMT класса Child() Base() Child() ? Логически мешало, а не технически. Во время конструирования Base объект Child ещё не создан. Следовательно, его методы полезут к не сконструированным мемберам. Итог подобного в деструкторе буквально только что описывал Chow. |