Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Согласен с тобой, только... 19.11.05 08:43 Число просмотров: 1559
Автор: void <Grebnev Valery> Статус: Elderman
|
Согласен с тобой, только...
> Дык sizeof учтет все "дырки". Потому как sizeof делается на > всю структуру, а не суммируются sizeof-ы элементов. согласен 100 %.
Только есть единственная неприятность может быть с полным покрытием и последующим memset, а именно, sizeof() никогда не возращает 0 для структур и классов, даже для пустых (нет членов):
struct a {
};
sizeof(a) !=0; // равно всегда 1 для пустой сруктуры, если только не от чего не наследуем.
тогда
memset( & inst, 0, sizeof(a))
... скопирует один байт... но куда? Есть ли гарантия, что этот байт уже распределён под структуру?
> В ходе обсуждения мы когда то выяснили, что самых страшных > подводных камней два: 1) Можно ничтоже сумняшися постирать > уже проинициализированные данные базового класса (если > такой финт выполняется в конструкторе дочернего класса) 2) > Можно постирать неявные указатели (vtable, vbase), которые > behind the scenes добавляет компилятор, если класс является > полиморфным (содержит виртуальные функции).
В принципе, то что он говорит (хотя и не совсем про те вещи, что мы обсуждали) правильно.
Наибольшие косяки возникают именно для массивов структур. Хотя и там, дело не в sizeof... Как раз sizeof - то сработает верно.
|
|
|