Рассмотрим следующий пример кода:
class C
{
public:
int* x;
};
void f()
{
C* c = static_cast<C*>(malloc(sizeof(C)));
c->x = nullptr; // <-- here
}
Если мне приходилось жить с неинициализированной памятью по какой-либо причине (конечно, если это возможно, я бы назвал new C()
), я все равно мог бы назвать конструктор размещения. Но если я опустил это, как указано выше, и инициализировал каждую переменную-член вручную, приведет ли она к поведению undefined? То есть является обход поведения конструктора как такового undefined или же законно заменить вызов его каким-то эквивалентным кодом вне класса?
(Перешел через это через другой вопрос по совершенно другому вопросу, прося любопытство...)