2015-10-21 3 views
2

Пусть у меня есть класс Inner внутри другого класса Outer:Удалить экземпляр внутреннего класса в экземпляре внешнего класса

class Inner 
{ 
public: 
    Inner(); 
    ~Inner(); 
}; 

class Outer 
{ 
public: 
    Outer(); 
    ~Outer(); 
private: 
    Inner in; 
}; 

Сейчас говорит в основном Заявляет объект типа Outer:

int main() 
{ 
    Outer out; 

    return 0; 
} 

Объект out имеет экземпляр in в качестве участника. Если я вызову деструктор out, он в свою очередь вызовет деструктор in? Если нет, как я могу реализовать деструктор для класса Outer, чтобы успешно вызвать деструктор класса Inner?

Например, если у меня есть приложение пользователей, и у каждого пользователя есть профиль, как я могу сделать это, когда учетная запись пользователя будет удалена, так же как и профиль пользователя?

+0

Будет вызываться деструктор для 'in'. Он не будет вызываться, если 'in' был' inner * 'и был объявлен с использованием' new'. –

ответ

2

Когда ваш пример выходит из сферы действия, первое, что случается, - это все его члены (которые также вышли из сферы действия) вызвали их деструкторы. Затем вызывается деструктор class Outer. Стандарт C++ гарантирует это, поэтому это поведение автоматически генерируется вашим компилятором C++.