函数返回一个对象(就构造函数和析构函数而言)会发生什么?

时间:2013-08-18 06:28:40

标签: c++ oop constructor

在一本书中,我偶然发现,“当一个函数返回一个对象时,会自动创建一个保存返回值的临时对象。该对象实际上是由函数返回的。被归还后,这个物体被摧毁了。“

我无法完全理解这里所说的内容。

// Returning objects from a function.
#include <iostream>
using namespace std;

class myclass 
{
    int i;

    public:

    myclass()
    {
        cout << "constructing: " << i << endl;
    }

    ~myclass()
    {
        cout << "destructing: " << i << endl;
    }

    void set_i(int n) { i=n; }
    int get_i() { return i; }
};

myclass f(); // return object of type myclass

int main()
{
    myclass o;
    o = f();

    cout << o.get_i() << "\n";
    return 0;
}

myclass f()
{
    myclass x;
    x.set_i(1);
    return x;
}

上述程序提供以下输出。

constructing: 0
constructing: 3935896
destructing: 1
1
destructing: 1

我的问题是:

当从f()返回“x”时,应该根据本书创建一个临时对象。但是,没有打印“构造:”,因为正在创建“x”的副本,因此调用构造函数是多余的(这是同样的原因,因为在将对象传递给函数时,只会调用其析构函数)

但是,当该临时对象被销毁时,为什么它的析构函数不被调用?

0 个答案:

没有答案