170 похожих чатов

Подскажите, верны ли мои суждения. По стандарту, объект завершает время

своей жизни при переиспользовании занимаемого им хранилища. Так как определения переиспользования в стандарте нет, положим, что это означает создать (create) объект в этом хранилище. По стандарту, объект неявно создаваемого типа также создаётся неявно в результате вызова функции operator new, которая имеет размещающую форму, которая ничего не делает. Таким образом, функция, не производящая действий, может окончить время жизни объекта?
Прав ли я, и если не прав, то где?

17 ответов

16 просмотров

По стандарту, объект завершает время своей жизни при переиспользовании занимаемого им хранилища. А можно ссылку?

Артём Колпаков
http://eel.is/c++draft/basic.memobj#basic.life-1.5

Ну это же не единственный вариант

Артём-Колпаков Автор вопроса
Danya🔥
Ну это же не единственный вариант

Но факт переиспользования хранилища всё-таки есть из цепочки рассуждений

объект неявно создаваемого типа Что за объект такой?

Ты как-то всё очень сложно объясняешь

По стандарту, объект неявно создаваемого типа также создаётся неявно в результате вызова функции operator new, которая имеет размещающую форму, которая ничего не делает. Пример кода можно?

Артём Колпаков
https://godbolt.org/z/vde8bW

Ну по сути по стандарту да, да и по логике тоже Кстати, окончание lifetime связано как-то с вызовом деструктора?

Завершит он после окончания работы деструктора, который при placement new ты обязан явно вызвать. То есть в этом случае время жизни объекта задаётся руками программистом. Про твои рассуждения я не понял. Ты явно вызываешь placement new - и объект начал свою жизнь. Ты явно вызываешь деструктор - жизнь объекта закончена. Вроде бы все прозрачно.

Артём-Колпаков Автор вопроса
Ilya Zviagin
Завершит он после окончания работы деструктора, ко...

Стандарт разрешает не вызывать деструктор

Артём-Колпаков Автор вопроса
Ilya Zviagin
Чего?

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

Артём Колпаков
Стандарт разрешает не вызывать деструктор

А что тебя то заставляет не вызывать деструктор?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта