2017-05-30 4 views
-1

Ich habe eine Klasse B abgeleitet von A. A implementiert Kopierkonstruktor und Zuweisungsoperator. Ich Copykonstruktor für B und wollen für B. Mein Ansatz Zuordnung implementieren (höchstwahrscheinlich falsch) istKopieren Zuweisungsoperator für abgeleitete Klasse

B& B::operator=(const B& other) { 
    B tmp (other); 
    std::swap <A>(*this, tmp); 
    std::swap (m_member, other.m_member); 
} 

Kann so etwas wie diese Arbeit? Ich habe im Internet nach Spezialisierungen von std :: swap zu einer Basisklasse gesucht, aber nichts Nützliches gefunden.

+2

Bitte stellen Sie Ihren Titel eher die Frage beschreiben als nur die Auflistung Technologien –

+0

Es ist immer noch Namen nur eine Sache, anstatt zu fragen oder zu beschreiben eine Frage –

Antwort

0

Sie können diesen Stapelüberlauf-Thread (calling operators of base class... safe?) überprüfen, wie Operator = aus der Basisklasse verwendet wird.

Was ich nicht verstehe ist, warum Sie Swap verwenden. Sie sollten stattdessen so etwas tun:

B& B::operator=(const B& other) { 
    A::operator = (other); 
    this->m_member = other.m_member; 
    return *this; 
} 
+0

M_member kann dynamisch zugeordnet werden. Ich benutze den Kopierkonstruktor, um den neuen Speicher zuzuweisen, und versuche dann nur so zu wechseln, dass der Destruktor von tmp Speicher freigibt. – Cristi

+0

Wenn Sie C++ 11 verwenden, versuchen Sie, std :: unique_ptr oder std :: shared_ptr zu verwenden. Sehen Sie sich diese Seite an, die Videos zu unique und shared_ptr enthält: https://www.youtube.com/playlist?list=PL5jc9xFGsL8FWtnZBeTqZBbniyw0uHyaH Eine andere Lösung besteht darin, eine private/protected-Methode zu erstellen, um Speicher dynamisch zuzuordnen und sie sowohl vom Konstruktor als auch von vom Betreiber = –

Verwandte Themen