繁体   English   中英

复制构造函数和复制赋值运算符是否应该具有相同的语句?

[英]Should the copy constructor and copy assignment operator have the same statements?

返回类型当然会不同,但概念是一样的:将数据从一个 object 复制到另一个,对吧?

概念根本不同; 复制构造函数创建一个新的 object ,其中一个不存在(并且不返回任何内容——甚至不返回void ),并且赋值运算符更新已经存在的 object 。

不会。虽然复制赋值运算符确实将数据复制到另一个 object,但复制构造函数使用复制的数据初始化一个的 object。 因此,它将使用其成员初始化器列表以递归方式调用其成员的复制构造函数,而复制赋值运算符将调用其他复制赋值运算符。

struct Foo {

    Foo(Foo const &orig)
    : data{oring.data} { }

    Foo &operator = (Foo const &orig) {
        data = orig.data;
        return *this;
    }

private:
    std::string data;
};

copy constructor函数使用已经存在的 object 初始化新的 object。

copy assignment将一个 object 的值分配给另一个 object,两者都已经存在。

暂无
暂无

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

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