своей жизни при переиспользовании занимаемого им хранилища. Так как определения переиспользования в стандарте нет, положим, что это означает создать (create) объект в этом хранилище. По стандарту, объект неявно создаваемого типа также создаётся неявно в результате вызова функции operator new, которая имеет размещающую форму, которая ничего не делает. Таким образом, функция, не производящая действий, может окончить время жизни объекта?
Прав ли я, и если не прав, то где?
По стандарту, объект завершает время своей жизни при переиспользовании занимаемого им хранилища. А можно ссылку?
http://eel.is/c++draft/basic.memobj#basic.life-1.5
Ну это же не единственный вариант
Но факт переиспользования хранилища всё-таки есть из цепочки рассуждений
объект неявно создаваемого типа Что за объект такой?
Ты как-то всё очень сложно объясняешь
По стандарту, объект неявно создаваемого типа также создаётся неявно в результате вызова функции operator new, которая имеет размещающую форму, которая ничего не делает. Пример кода можно?
https://godbolt.org/z/vde8bW
Интересно конечно
Ну по сути по стандарту да, да и по логике тоже Кстати, окончание lifetime связано как-то с вызовом деструктора?
http://eel.is/c++draft/basic.memobj#basic.life-1.4
Завершит он после окончания работы деструктора, который при placement new ты обязан явно вызвать. То есть в этом случае время жизни объекта задаётся руками программистом. Про твои рассуждения я не понял. Ты явно вызываешь placement new - и объект начал свою жизнь. Ты явно вызываешь деструктор - жизнь объекта закончена. Вроде бы все прозрачно.
Стандарт разрешает не вызывать деструктор
For an object of a class type, the program is not required to call the destructor explicitly before the storage which the object occupies is reused or released; however, if there is no explicit call to the destructor or if a delete-expression ([expr.delete]) is not used to release the storage, the destructor is not implicitly called and any program that depends on the side effects produced by the destructor has undefined behavior
Блин. Но там же тогда UB будет.
А что тебя то заставляет не вызывать деструктор?
Обсуждают сегодня