So in circostanze normali come occuparmi della disallocazione della memoria. Il mio caso è leggermente diverso.delete operatore - come implementare?
Sto implementando il mio pool di memoria. Vorrei che il cliente della mia classe fosse il più vicino al metodo generale di allocazione e disallocazione.
inline void* operator new(size_t dead_param, CPool& objPool)
{
return objPool.Allocate();
}
ho questo funzione globale, in modo che l'utente della mia classe può semplicemente chiamare
Base baseObj = new (poolObj)Base2();
Ora non so come chiamare distruttore? I clearl ho idea di
se ho operatore globale delete
inline void operator delete(void* ptr, CPool& objPool)
{
objPool.DeAllocate(ptr);
}
si prega di guida .. come posso ottenere questa funzione chiamata dal codice cliente? Con modifiche minime alla sintassi dal lato utente. Si noti inoltre che non voglio che gli utenti del mio codice implementino operator new
e operator delete
e chiamino da questo numero Allocate
e DeAllocate
.
Perché non solo sono persone chiamare 'Base * baseObj = poolObj.Allocate();' – Barry
sintassi per il cliente sembra poco brutto. 'Base * baseObj = (Base *) poolObj.Allocate()'. Yuck .. typecasting ... che sebbene io abbia mantenuto come ultima risorsa .. Anche dal momento che non riesco a ottenere questa funzione chiamata, sono curioso ora .. – Adorn
Il posizionamento delete è sempre chiamato dal posizionamento interno nuovo, quando un costruttore esce con un'eccezione. In tutti gli altri casi, viene chiamato un operatore "normale" 'delete (void *)'. Si suppone che si debbano immagazzinare informazioni sufficienti nel blocco di memoria assegnato per poter deallocarlo in seguito, senza ulteriori input. Spesso, l'allocatore scrive ulteriori informazioni sull'offset negativo dal puntatore restituito. –