Момент вызова деструктора
От: trophim Россия  
Дата: 05.03.13 19:47
Оценка:
Что говорит стандарт о следующем:

{
    ...
    CheckedCall(ptr)->Fun(p1,p2,p3); //#1
    ...
} //#2



CheckedCall — оборачивает переданный указатель в небольшой объект и возвращает его (оператор -> соответственно перегружен). Так вот вопрос: в какой момент будет вызван деструктуор этого объекта? В точке #1 (т.е. по окончании вычисления выражения) или #2 (по выходу из области видимости)?
... << RSDN@Home 1.2.0 alpha 5 rev. 1495>>
Let it be! — Давайте есть пчелу!
Re: Момент вызова деструктора
От: rg45 СССР  
Дата: 05.03.13 20:07
Оценка: 9 (3)
Здравствуйте, trophim, Вы писали:

T>Что говорит стандарт о следующем:


T>
T>{
T>    ...
T>    CheckedCall(ptr)->Fun(p1,p2,p3); //#1
T>    ...
T>} //#2    
T>



T>CheckedCall — оборачивает переданный указатель в небольшой объект и возвращает его (оператор -> соответственно перегружен). Так вот вопрос: в какой момент будет вызван деструктуор этого объекта? В точке #1 (т.е. по окончании вычисления выражения) или #2 (по выходу из области видимости)?


В точке #1:

12.2/3 (ISO/IEC 14882:2011)
R>When an implementation introduces a temporary object of a class that has a non-trivial constructor (12.1, 12.8), it shall ensure that a constructor is called for the temporary object. Similarly, the destructor shall be called for a temporary with a non-trivial destructor (12.4). Temporary objects are destroyed as the last step in evaluating the full-expression (1.9) that (lexically) contains the point where they were created. This is true even if that evaluation ends in throwing an exception. The value computations and side effects of destroying a temporary object are associated only with the full-expression, not with any specific subexpression.

--
Не можешь достичь желаемого — пожелай достигнутого.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.