На этот вопрос уже есть ответ здесь:
Как мы все знаем, конструктор и деструктор идут парами.
Но следующий фрагмент кода ведет себя иначе: конструктор вызывается дважды, а деструктор вызывается только один раз!
{
Animal ahe;
ahe = CreateAnimal();
}
Пожалуйста, прочтите более подробное объяснение.
Предположим, что существует класс с именем Animal, и у нас есть следующий код.:
int main(int argc, char* argv[])
{
Animal ahe;
return 0;
}
Ожидается, что конструктор и деструктор Animal будут вызываться один и только один раз. И когда я запускаю код, он ведет себя именно так, как я ожидал.
Но это выглядит довольно странно, когда дело доходит до следующего кода, когда ссылка на Animal возвращается функцией. Когда я запускаю код, конструктор вызывается дважды, а деструктор вызывается только один раз!
#include "stdafx.h"
#include "stdio.h"
#include "iostream.h"
class Animal
{
public:
Animal();
Animal(long age);
~Animal();
private:
long m_age;
};
Animal::~Animal()
{
cout<<"Animal::~Animal()"<<"age="<
//output
Animal::Animal()age=1
Animal::Animal()age=5
Animal::~Animal()age=5
Очевидно, что деструктор первого объекта не вызывается, почему? Проблема может быть серьезной, если у Animal много ресурсов, которые нужно высвободить в его деструкторе.