0

Мне нужно реализовать общую карту. Я решил реализовать его со связанным списком. Я замечаю, что конструктор копирования и оператор присваивания похожи, потому что они создают и копируют связанный список. Так что мне интересно, могу ли я использовать оператор копирования в операторе присваивания или наоборот. У вас есть идея сделать это?Использование конструктора копирования в операторе присваивания для связанного списка

+2

Я думаю, что вы могли бы искать: [Что такое копирование и своп идиома? ] (http://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom) – NathanOliver

+1

Чтобы использовать икону копирования/свопа, убедитесь, что конструктор копирования находится там, где находится фактический код копирования , Он не должен полагаться или использовать оператор присваивания. Тогда вам также нужен рабочий деструктор. У вас есть эти два, тогда оператор присваивания - это кусок торта, использующий copy/swap, поскольку эта идиома зависит от рабочего конструктора и деструктора. – PaulMcKenzie

+1

Я озадачен тем, почему вы решили реализовать карту, используя связанный список. Если бы я был твоим учителем, ты бы не согласился с этим. – SergeyA

ответ

0

В большинстве случаев, если вы определили конструктор копирования, он уже используется, когда вы выполняете назначение копии. То есть компилятор неявно использует ваш конструктор копий для определения назначения копии в общем случае.

Пример:

#include<iostream> 
using namespace std; 
struct copy_me { 
    int member; 
    copy_me() : member(0) {}; 
    copy_me(const copy_me &other) : member(other.member) { 
     cout << "copy const called" << endl; 
    }; 
}; 

int main() { 
    copy_me me; 
    copy_me other = me; 
    return other.member; 
} 

Выход:

copy const called 

Чтобы ответить на ваш конкретный вопрос: