Должны ли конструктор копирования и оператор присваивания копии иметь одинаковые операторы? - PullRequest
0 голосов
/ 14 октября 2019

Тип возвращаемого значения, конечно, будет другим, но концепция та же: копирование данных из одного объекта в другой, верно?

Ответы [ 3 ]

4 голосов
/ 14 октября 2019

Концепции принципиально разные;конструктор копирования создает новый объект, в котором он не существует (и ничего не возвращает - даже void), а оператор присваивания обновляет объект, который уже существует.

1 голос
/ 14 октября 2019

Нет. Пока оператор присваивания копирует данные в другой объект, конструктор копирования инициализирует объект новый с скопированными данными. Таким образом, он будет использовать свой список инициализатора члена для рекурсивного вызова конструкторов копирования своего члена, тогда как оператор копирования-назначения будет вызывать другие операторы копирования-назначения.

struct Foo {

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

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

private:
    std::string data;
};
0 голосов
/ 14 октября 2019

copy constructor инициализирует новый объект уже существующим объектом.

copy assignment присваивает значение одного объекта другому объекту, оба из которых уже существуют.

...