121 TIF

121 TIF



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


Wyszukiwarka

Podobne podstrony:
226 TIF II Wskazówka 94. String(const String &string): m_cchTest(10){ lnitString(string.m_pch,
KlasyPo class Napis { private: const int m_cchTest; public: Napis(void) : m_cchTest(10){}}; Zgodnie
070 TIF virtua! ~lntelWskPodst(){ rf(m_pt) delete m_pt; m_pt = NULL;} T &operator*() const{ retu
Save0002 TIF (C^,8 m/s2(aw,dop,8h) b.    3,0 m/s2(awz 30min) c.    10,
s121 Dyski twarde 121 9.    W celu zmiany typu partycji wciśnij 1: Command {m tor hel
140 TIF char *m_pch; public: int operator==(const Napis& napis) const{ return(strcmp(m_pch, napi
068 TIF unikanie nieoczekiwanych wynikówUżywanie deklaracji const *Przed void Napis::lnicjNapis(char

więcej podobnych podstron