Normal koşullarda bellek ayırma işleminin nasıl yapıldığını biliyorum. Benim durumum biraz farklı.operatörü sil - nasıl uygulanır?
Kendi bellek havuzumu uyguluyorum. Sınıfımın müşterisinin, genel tahsis ve tahsisat yöntemine yakın olmasını istiyorum.
inline void* operator new(size_t dead_param, CPool& objPool)
{
return objPool.Allocate();
}
benim sınıfının kullanıcı basitçe
Base baseObj = new (poolObj)Base2();
çağırabilir yüzden, bu küresel işleve sahip
Şimdi yıkıcı çağırmak nasıl bilmiyorum? Küresel operatörinline void operator delete(void* ptr, CPool& objPool)
{
objPool.DeAllocate(ptr);
}
kılavuz lütfen silme olsa ben istemci kodundan denilen bu işlevi nasıl alabilirim ben .. no fikir
sahip clearl? Kullanıcı tarafındaki sözdiziminde minimum değişiklik. Ayrıca, benim kodlarımın operator new
ve operator delete
'u uygulamak istemediğini ve oradan Allocate
ve DeAllocate
numaralı telefonu arayacağımı unutmayın.
Neden insanlar 'Baz * baseObj = poolObj.Allocate() çağrısı sadece var; müşteri için' – Barry
Dizimi biraz çirkin görünüyor. Base * baseObj = (Base *) poolObj.Allocate() '. Yuck .. typecasting ... ben son çare olarak tutmuş olsam da .. Bu fonksiyona gelemediğimden beri, şimdi güvendeyim .. – Adorn
Yerleşim silme, bir kurucu ile çıktığı zaman, sadece iç yerleşimden yeni çağrılır bir istisna. Diğer tüm durumlarda, bir "normal" işleç silme (void *) 'denir. Daha sonra ek bir girdi olmadan, daha sonra ayrılabilmek için ayrılmış bellek bloğuna yeterli bilgiyi saklamanız gerekir. Genellikle, ayırıcı, döndürdüğü gösterici tarafından negatif ofsette ek bilgi yazardı. –