210
// Егер жадыда бос орын болмаса, кезекті блокты бөлеміз:
else {
pObj *newblock = static_cast
1
(::operator new(BLOCK_SIZE * sizeof(pObj)));
// Біріншіден басқа барлық ұяшықтар бос (ол
// қолданылуда), оларды байланыстырамыз:
for (int i = 1; i< BLOCK_SIZE - 1; ++i)
newblock[i].next = &newblock[i + 1];
newblock[BLOCK_SIZE - l].next = 0;
// Бос ұяшықтар тізімінің басын белгілейміз:
headOfFree = &newblock[l];
р = newblock;
}
return p; // Белгіленген жадыға нұсқауышты қайтарамыз
}
Асыра жүктелген
new
операциясы мұраланады, сондықтан ол туындайтын
объектілер үшін шақырылады. Егер олардың көлемдері негізгі объект көлеміне
сəйкес келмесе (осылай болуы əбден ықтимал), онда қиындықтар туындауы
мүмкін. Олардың алдын алу үшін операцияның басында көлемдердің сəйкес
келуі тексеріледі. Егер объектінің көлемі
new
операциясы асыра жүктелген
көлемге тура келмесе, жадыны бөлуге сұраныс стандартты
Достарыңызбен бөлісу: