Re[2]: placement new (this) в конструкторе
От: σ  
Дата: 30.03.18 16:32
Оценка:
N. I.:

NI>σ:


σ>>Вопрос ИСКЛЮЧИТЕЛЬНО юридический


NI>Статья 273 УК


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

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

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

σ>>Это так или нет? И почему?


NI>Похоже на неявное undefined behavior — это когда в стандарте попросту нет описания того, как некая конструкция должна работать.


Я хотел поспорить и сказать, что поведение определено в http://eel.is/c++draft/basic.life#6 и this можно использовать как указатель на сторадж, но понял, что, оказывается, я проглядел "For an object under construction or destruction, see [class.cdtor]". Т.е. объект может быть не только в двух состояниях: когда лайфтайм ещё не начался (уже закончился) или уже начался (и ещё не закончился), но ещё и в "промежуточном" — under construction/destruction.

В общем, вопроса почему UB больше нет — я просто невнимательно читал параграф стандарта.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.