9.6. Qiymat berish va initsializatsiya Qiymat berish va initsializatsiya turli amallardir. Ayniqsa destruktor
aniqlanganda bu muximdir. Biror X tipidagi obyektni insializatsiya qilish nusxa olish
konstruktori yordamida amalga oshiriladi. Satr – bu simvollar vektoriga ko‘rsatkich.
Vektor konstruktor tomonidan yaratilib, destruktor bilan o‘chirilganda muammo
tug‘ilishi mumkin:
string s1(10);
string s2(20)
s1 = s2;
Bu yerda ikki simvolli vektor joylashadi, lekin s1 = s2 qiymat berish natijasida
biri o‘chirilib, ikkinchisi nusxasi bilan almashtiriladi. Funksiyadan chiqishda s1 va s2
uchun destruktor chaqiriladi va bitta vektor ikki marta o‘chiriladi. Bu muammoni xal
qilish uchun qiymat berish amalini qo‘shimcha yuklash lozim:
string& string::operator=(const string& a)
{ if (this !=&a) { // opasno, kogda s=s
delete p;
p = new char[size=a.size];
strcpy(p,a.p);
}
return *this; }
Foydalanuvchi qiymat berish operatori initsializatsiya qilinmagan obyektga
qo‘llanmaydi. Bu holda p ko‘rsatkich tasodifiy qiymatga ega bo‘ladi.
82
Initsializatsiya masalasini xal qilish uchun nusxa olish konstruktori kiritish
lozim:
string::string(const string& a)
{ p=new char[size=sz];
strcpy(p,a.p); }