Re: placement new (this) в конструкторе
От: MasterZiv СССР  
Дата: 02.04.18 13:31
Оценка: -2
Здравствуйте, σ, Вы писали:

σ>Вопрос ИСКЛЮЧИТЕЛЬНО юридический, с точки зрения стандарта языка.

σ>Мнения про недопустимость такого стиля и предложения заменить на delegating constructors не интересуют.

σ>Так вот. Мне встречалось утверждение что вызов другого конструктора изнутри данного:

σ>
σ>Klass::Klass(some_params)
σ>{
σ>    new (this) Klass(other_params);
σ>}
σ>

σ>приводит к UB.

Это UB.
Для каждого объекта, для которого вызван конструктор, должен быть вызван деструктор.
Для объектов, управляемых через placement new / delete деструкторы должны быть вызваны
руками. тут этого нет. Конструктор Klass уже сработал, а деструктор его не вызывается.
Объект, конструируемый по placement new также должен создаваться на базе памяти, в которой
не существует валидного (т.е. не прошедшего через деструктор) объекта. Тут это тоже не
соблюдается.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.