Как сделать эквивалент memset (это, ...), не заглушая vtbl?
Я знаю, что memset не одобряется дляclass
инициализация. Например, что-то вроде следующего:
class X { public:
X() { memset( this, 0, sizeof(*this) ) ; }
...
} ;
забьетvtbl
если там'сvirtual
функция в миксе.
Я работаю над (огромной) унаследованной кодовой базой, которая написана на языке C, но скомпилирована в C ++, поэтому все рассматриваемые члены обычно являются POD и не требуют традиционных конструкторов C ++. Использование C ++ постепенно распространяется (как виртуальные функции), и это кусает разработчиков, которые неЯ не понимаю, что у memset есть эти дополнительные зубы C ++.
Интересно, существует ли безопасный для C ++ способ начальной инициализации с нулевым перехватом, который может сопровождаться определенной инициализацией по элементам, где нулевая инициализация не является 'не подходит?
Я нахожу похожие вопросыmemset для инициализации в C ++, а такжеобнуление производной структуры с использованием memset, У обоих естьдон»не использовать memset () " ответы, но нет хороших альтернатив (особенно для больших структур, потенциально содержащих много членов).