Funksiyasi kabi, get funksiyasi


Bazaviy sinf konstruktorini chaqirish


Download 446.14 Kb.
bet14/23
Sana09.01.2023
Hajmi446.14 Kb.
#1085802
1   ...   10   11   12   13   14   15   16   17   ...   23
Bog'liq
Dasturlash Yakuniy javoblari (2)

Bazaviy sinf konstruktorini chaqirish (KengSinf(parametrlar): BazaviySinf());

Konteynervauniqo‘llanilishi.Xotiradako‘phollardamerosxo‘rob’e
ktlarinisaqlovchisinflarvujudgakeladi.
Ularning xotiradan o‘chirilishi bazaviysinf bilan bog‘liqdir. Masalan,
Sinf bo‘lsin vatugun ichidagi matndan olingan mo‘rosxo‘rlari Node va Attribu
Te hamda(char*) qatorlardan to‘ldirilgan.
Yoki papkani qayta o‘qish va yana o‘zgartirishda,
birmartayuklanadifaylmenejerifayllarvakataloglarro‘yxati.
Yuqoridako‘rsatilgandek, new operatoriganisbattan delete
operatorifoydalanishqiyinroqvamuammoliroqbo‘ladi.
Bazaviysinfob’ektibilanbog‘liqkattablokdamerosxo‘rsinfob’ektlariuchun
xotiraajratishkerak. Bazaviysinfob’ektiniyo‘qqilishpaytida,
destruktorodatdagidek, merosxo‘rsinfuchunchaqiriladi,
lekinxotiraniqaytarishingizshartemas — bukattablokdaozodqilinadi.
PointerBumpAllocator sinfyaratamiz.
Businfkattablokdanturlio‘lchamdagiqismlarnikesibtashlashvaeskisitugag
ach, yangikattabloknitanlashgaimkonberadi.
Nihoyat, new va delete operatorlaribilan childObject
nituzamizvaberilgan allocator bilanmurojaatqilamiz:
template
struct ChildObject
{
static void* operator new(size_t s, A& allocator) {
return allocator.AllocBlock(s);
}
static void* operator new(size_t s, A* allocator) {
return allocator->AllocBlock(s);
}
static void operator delete(void*, size_t) { }
static void operator delete(void*, A*) { }
static void operator delete(void*, A&) { }
private:
static void* operator new(size_t s);
};
Child sinfigao‘zgaruvchilarniqo‘shishuchunbarchaeʻlonlarni new
operatoriorqaliamalgaoshirishkerakbo‘ladi. New
operatoriquyidagichabo‘ladi.
new (… parametrlar… ) ChildObject (…konstruktorparametrlari… )
QulaylikuchunA&va A* uchun new operatorlarniqo‘llaymiz.
node = new(allocator) XmlNode(nodename);
Agarallokatorajratuvchisifatidaqo‘shilsa,
ikkinchisidanfoydalanishqulayroq:
node = new(this) XmlNode(nodename);
Bundantushinarlibo‘ladiki,
ortiqchabelgilardanqochishdaamallarnibo‘lishuchunko‘rsatkichvahavolal
arkonvertatsiyabo‘ladi.
Ob’ektyaratishdaqaysi New
operatoridanfoydalanganligigaqaramasdan, delete
operatoriyordamidao‘chirishamalgaoshirilmaydi,
kompilyatorningo‘zistandart delete operatoridanfoydalanadi.


  1. Download 446.14 Kb.

    Do'stlaringiz bilan baham:
1   ...   10   11   12   13   14   15   16   17   ...   23




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling