Я видел это в eCos, RTOS, для инициализации некоторых своих объектов ядра.
Как указал Томалак, одним из недостатков является то, что виртуальные функции не допускаются.Они пытаются гарантировать, что, проверяя на равный размер sizeof(kernel object) == sizeof(variable used for initialization)
.
Их код, хотя и был намного сложнее, с использованием C-struct имитировал переменные-члены класса C ++ для интерфейса c вместо использования функций C для/ установить переменные в классе C ++
Хотя поведение, к которому они шли, было совершенно противоположным, они использовали значения из класса C ++, установленные в конструкторе, для заполнения памяти из placement new
.
Я не советую делать это, хотя.