繁体   English   中英

为什么复制构造函数被调用,即使我实际上是在C ++中复制到已经创建的对象?

[英]why copy constructor is getting called even though I am actually copying to already created object in C++?

我写下面的代码,我不明白为什么复制构造函数被调用。

#include <iostream>

using namespace std;

class abc
{
    public:
        abc()
        {
            cout << "in Construcutor" << (this) << endl;
        };

        ~abc()
        {
            cout << "in Destrucutor" << (this) << endl;
        };

        abc(const abc &obj)
        {
            cout << "in copy constructor" << (this) << endl;
            cout << "in copy constructor src " << &obj << endl;
        }

        abc& operator=(const abc &obj)
        {
            cout << "in operator =" << (this) << endl;
            cout << "in operator = src " << &obj << endl;
        }
};

abc myfunc()
{
    static abc tmp;

    return tmp;
}

int main()
{
    abc obj1;

    obj1 = myfunc();

    cout << "OK. I got here" << endl;
}

当我运行这个程序时,我得到以下输出

in Construcutor0xbff0e6fe
in Construcutor0x804a100
in copy constructor0xbff0e6ff
in copy constructor src 0x804a100
in operator =0xbff0e6fe
in operator = src 0xbff0e6ff
in Destrucutor0xbff0e6ff
OK. I got here
in Destrucutor0xbff0e6fe
in Destrucutor0x804a100

我不明白为什么在我实际分配对象时调用复制构造函数。

如果我在myfunc()声明abc tmp而不是static abc tmp ,则不会调用复制构造函数。 任何人都可以帮助我了解这里发生了什么。

因为你从myfunc 按值返回一个对象,这意味着它被复制了。

拷贝构造函数,如果你不使对象没有被调用的原因staticmyfunc是因为复制省略返回值优化 (又名RVO)。 请注意,即使您的复制构造函数可能未被调用,它仍然必须存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM