为什么复制构造函数不会在返回类的本地函数中调用

时间:2017-06-20 05:58:07

标签: c++

我有以下代码来测试本地函数返回的对象的流程。只想弄清楚它是如何工作的。在开始时,我认为返回的对象将调用复制构造函数来初始化main函数中的变量tt。在这种情况下,这段代码会导致分段错误,因为我没有做真正的副本,例如深刻的副本。但是发生的事情完全不是我的想法。它没有调用复制构造函数,也没有遇到分段错误。我真的想知道为什么?

另一个实验是,如果我将显式添加到复制构造函数,编译器将报告错误以隐式调用该副本 构造函数。我只是不明白这个功能是如何工作的。

我的测试环境是在Ubuntu 16.04.1上使用g ++编译器(Ubuntu 5.4.0-6ubuntu1~16.04.4)5.4.0 20160609

class test{
public:
    explicit test(int n);
    test(const test& t);
    ~test();
    int getCount(){return count;}
    void  printChar(int idx){ cout<<data[idx]<<endl; }
    void setChar(int idx, char v){ data[idx]=v; }
private:
    int *data;
    int count;
};

test::test(int n):data(NULL)
{
    cout<<"in constructor"<<endl;
    data = new int [n];
    count =n;
}

test::test(const test& t)
{
    cout<<"in copy constructor"<<endl;
}

test::~test()
{
    cout<<"delete a test"<<endl;
    delete [] data;
}

test getClass()
{
    test t(10);
    t.setChar(0,'f');
    t.setChar(1,'u');
    return t;
}

int main()
{
    test tt = getClass();
    cout<<tt.getCount()<<endl;
    tt.printChar(0);
    return 0;
}

0 个答案:

没有答案
相关问题