#include typedef int T; class X { public: X(T const& t) // Konstruktor erzeugt dynamisches Objekt : p(new T(t)) { } ~X() // Destruktor gibt Speicher frei { delete p; } X(X const& rhs) // Kopierkonstruktor erforderlich : p(new T(*rhs.p)) // hier: tiefe Kopie { } X& operator=(X const& rhs) // Zuweisungsoperator { X tmp(rhs); // Kopie std::swap(p, tmp.p); // Tausch Attribute return *this; } private: T* p; // Zeiger auf dynamischen Speicher (Besitz) }; int main() { X a(1); X b(a); // Kopierkonstruktor in SmallTalk-Syntax X c = a; // Kopierkonstruktor in C-Syntax, keine Zuweisung! c = a; // Zuweisungsoperator }