C++:конструктор и деструктор не идут парами из-за ссылки на класс, возвращаемой функцией [duplicate]

На этот вопрос уже есть ответ здесь:

Как мы все знаем, конструктор и деструктор идут парами.

Но следующий фрагмент кода ведет себя иначе: конструктор вызывается дважды, а деструктор вызывается только один раз!

{
    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="<
            
0
задан Jack 2 March 2012 в 03:36
поделиться