[C++] C ++: Срок службы временных аргументов?


Answers

Каждый справедливо процитировал 12.2 / 3 или подобное, что отвечает на ваш вопрос:

Временные объекты уничтожаются как последний шаг при оценке полного выражения, которое (лексически) содержит точку, в которой они были созданы.

Мне показалось забавным, что на следующей странице в моей типографии стандарт 12.2 / 4 гласит:

Существует два контекста, в которых временные объекты уничтожаются в другой точке, чем конец полного выражения.

Ни один из них не относится к вашему примеру, оба они относятся к использованию временных элементов в инициализаторах. Но все идет, чтобы показать, что вам нужно держать свои мысли о себе, когда имеете дело с хитрым зверьком, подобным стандарту C ++.

Question

При создании нового экземпляра MyClass в качестве аргумента для такой функции:

class MyClass
{
  MyClass(int a);
};    

myFunction(MyClass(42));

делает ли стандарт грантополучателями сроков деструктора?
В частности, могу ли я предположить, что он будет вызван перед следующим оператором после вызова myFunction() ?




В разделе 12.2 «Временные объекты», раздел 3, стандарт ANSI / ISO C гласит: «... Временные объекты уничтожаются как последний шаг при оценке полного выражения, которое (лексически) содержит точку, в которой они были созданы».

Это тесно связано с концепцией точек последовательности . Когда точка последовательности достигнута, все побочные эффекты выражений гарантированно имели место.






Links