LINUX.ORG.RU

История изменений

Исправление rumgot, (текущая версия) :

У тебя UB. Правда, не очень явно описанное в стандарте. Если бы ты делал new (buffer_) double[10]; вне конструктора (и деструктора), то пришиб бы и a.buffer_, и весь a.

Но т.к. ты делаешь это в конструкторе, когда lifetime у объекта a ещё не начался, то ХЗ что значит такое создание объекта типа double[10] поверх объекта a. Неявное UB потому что в [class.cdtor] не описано что в этом случае будет.

Вообще я этими конструкциями не пользовался никогда. Поэтому с абсолютной уверенностью утверждать не стану. Но. Члены объекта создаются ДО вызова конструктора. В чем проблема? А операция new с размещением (по умолчанию) - так вообще ничего не выделяет фактически, а просто использует переданный ей адрес и преобразует его в указатель требуемого типа.

Исходная версия rumgot, :

У тебя UB. Правда, не очень явно описанное в стандарте. Если бы ты делал new (buffer_) double[10]; вне конструктора (и деструктора), то пришиб бы и a.buffer_, и весь a.

Но т.к. ты делаешь это в конструкторе, когда lifetime у объекта a ещё не начался, то ХЗ что значит такое создание объекта типа double[10] поверх объекта a. Неявное UB потому что в [class.cdtor] не описано что в этом случае будет.

Вообще я этими конструкциями не пользовался никогда. Поэтому с абсолютной уверенностью утверждать не стану. Но. Члены объекта создаются ДО вызова конструктора. В чем проблема? А операция new с размещением - так вообще ничего не выделяет фактически, а просто использует переданный ей адрес и преобразует его в указатель требуемого типа.