Стандарты C ++ не определяют срок хранения временных объектов. Это тема CWG, выпуск 1634 .
. В соответствии с сайтом, на который ведут ссылки, статус этого вопроса "drafting" , , что означает :
Составление : Неофициальный консенсус достигнут в рабочей группе и описан в грубой форме в Предварительной резолюции, хотя точная формулировка для изменения еще не доступна.
Однако, нет четкого упоминания о консенсусе / решении по этому конкретному вопросу, и я также не смог найти его где-либо еще на сайте комитета.
Я полагаю, чтоконсенсус заключается в том, что временные хранилища с увеличенным сроком службы должны иметь продолжительность хранения, равную продолжительности эталона, к которому они привязаны, но это менее очевидно для временных показателей с увеличенным сроком службы.
В частности, мне не ясно,временный объект, созданный в операторе в области блока, будет иметь (автоматически?) продолжительность хранения, продолжающуюся до конца блока, подобно автоматической переменной declared в той же точке, или время его хранения заканчивается его (по умолчанию) временем жизни в конце полного выражения. Описание проблемы намекает на последний случай.
Должно ли описание содержать « Предварительное решение », и если да, то правильно я истолковал или нет, могу ли я найти" Предварительное решение " этой проблемы где-то еще?
Кроме того, в настоящее время основные компиляторы следуют этому консенсусу, либо документально, либо де-факто?
См. Также старые вопросы:
Редактировать для уточнения:
Я не спрашиваю о времени жизни временного объектаЭто хорошо указано в стандарте. Я спрашиваю о продолжительности хранения. Например:
#include<new>
struct A {
operator A*() {
return this;
}
int i = 0;
// Some other stuff (and non-trivial destructor)
};
A* ptr1 = A();
A* ptr1_new = new(ptr1) A();
// Use new object through ptr1_new
A* ptr2 = A();
int main() {
A* ptr2_new = new(ptr2) A();
A* ptr3 = A();
A* ptr3_new = new(ptr3) A();
// Use new objects through ptr2_new and ptr3_new
}
Вопрос в том, намеревается ли стандарт (комитет), чтобы эти новости размещения были четко определенными или неопределенными. Подумав об этом некоторое время, я полагаю, что, вероятно, предполагается, что все они являются неопределенным поведением, но я хотел получить четкий ответ.
Другой аспект заключается в том, что стандарт часто относится к * 1055. * "объекты статического / автоматического / потокового / динамического хранения" и что временные объекты являются объектами, но без указания того, как определить, к какому из этих четырех классов они принадлежат.