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

问题描述 投票:0回答:3

返回类型当然会有所不同,但是概念是相同的:将数据从一个对象复制到另一个对象,对吗?

c++ operator-overloading copy-constructor assignment-operator
3个回答
4
投票

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


1
投票

没有复制分配运算符确实将数据复制到另一个对象时,复制构造函数使用复制的数据初始化new对象。这样,它将使用其成员初始化器列表来递归调用其成员的副本构造函数,而copy-assignment运算符将调用其他copy-assignment运算符。

struct Foo {

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

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

private:
    std::string data;
};

0
投票

copy constructor使用现有对象初始化新对象。

copy assignment将一个对象的值分配给另一个已经存在的对象。

© www.soinside.com 2019 - 2024. All rights reserved.