Kopie und Zuweisung, Besitz dynamischer Objekte

deepcopy.cpp
#include <iostream>
 
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
}