C ++ - когда уничтожается объект - PullRequest
0 голосов
/ 03 марта 2019

У меня есть класс, который служит дескриптором для временного каталога, используемого для тестирования.Используется так:

{
    TestArea ta("name_of_test");
    ta.call_method( );
    test_stuff( );
    ...
}

, когда достигается закрытие }, переменная ta выходит из области видимости и все очищается.Во многих случаях мне не нужно вызывать какой-либо из методов TestArea - и этого достаточно:

{
    TestArea("name_of_test");
    test_stuff();
}

, т. Е. С экземпляром TestArea не связано значение lvalue.Теперь мой вопрос: когда в этом месте будет вызван деструктор TestArea?Последний код на самом деле, кажется, работает - но я немного обеспокоен этим.

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

В обоих случаях объект создается и разрушается, когда он выходит из области видимости.

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

Во втором случае создается неназванный временный объект, который выходит из области видимости при достижении завершающего ; в конце оператора.То же самое верно для любого временного объекта, созданного в том же операторе.Например:

doSomething(T1(), T2(), T3());

Это создает 3 временных объекта, которые все остаются в области действия до тех пор, пока не будет достигнут терминатор ;.

0 голосов
/ 03 марта 2019

С помощью

TestArea("name_of_test");

вы создаете временный объект, и этот временный объект будет уничтожен немедленно .

Так как только выражениегде он был использован, значит, объект больше не существует.

...