m_pch = NULL;
Napis(const Napis &napis): m_cchTest(10)
lnicjNapis(napis.m_pch, napis.m_cch);
Napis(char *sz): m_cchTest(10)
lnicjNapis(sz, strlen(sz));
~Napis(void)
if(m_pch)
delete m_pch;
};
void Napis::lnicjNapis(const char * pch, int cch)
mech = 0; m_pch = NULL; if(cch)
m_pch = new char[cch+1]; if(m_pch)
strcpy(m_pch, pch); m_cch = cch;
Ta wskazówka nie różni się zbytnio od poprzedniej. Czy zatem powtarzamy się bez sensu? Ależ skąd. To wszystko jest bardzo ważne. Domyślne działanie konstruktora kopiowania polega na kopiowaniu zmiennych składowych. Jeśli zmienne są wskaźnikami, to trzeba dodatkowo wykonać kopię wskazywanej przez nie pamięci, a następnie zmienić wskaźniki, aby odnosiły się do nowego obszaru. Dopiero wtedy uzyskamy prawdziwą kopię. W przeciwnym razie kopia będzie tylko częściowa, skopiujemy same wskaźniki i do tego samego obszaru pamięci będzie się odnosiło kilka obiektów.
Przykład: klasa String w pliku String.cpp