Ho esaminato gli allocatori personalizzati e molto spesso li vedo usando un qualche tipo di funzione per allocare memoria. Per scopi di test e per istruirmi ulteriormente, ho cercato di fare un esempio "semplice" di farlo. Tuttavia, c'è una cosa fondamentale che ho capito su come fare. Una delle principali differenze in malloc
rispetto a new
è che con il nuovo viene chiamato il costruttore. Cosa succede se volessi scrivere il mio allocatore che essenzialmente sostituisce new
, come potrei chiamare il costruttore quando si utilizza malloc
?Callling object constructor/destructor con un allocatore personalizzato
Capisco che sulle classi posso sovraccaricare new
e delete
per la classe, quindi suppongo che una grande parte della domanda è: come si new
chiamando il costruttore di oggetti durante l'allocazione? Allo stesso modo, sono interessato a come delete
chiama il distruttore.
Ho creato un codice di prova di esempio che speravo di avere il costruttore SomeClass
chiamato durante l'allocazione, ma non vedo come.
#include <malloc.h>
void* SomeAllocationFunction(size_t size) {
return malloc(size);
}
class SomeClass
{
public:
SomeClass() {
int con = 1000;
}
~SomeClass() {
int des = 80;
}
};
int main(void){
SomeClass* t = (SomeClass*)SomeAllocationFunction(sizeof(SomeClass));
return 0;
}
(Come nota, so che posso solo usare new
. Tuttavia, ai fini di un apprendimento Sto cercando di creare un allocatore personalizzato che non si limita a chiamare new
o placement new
).
Se il posizionamento è quello che devo usare, allora come ad esempio' new' di MSVC non chiama il nuovo posizionamento nella sua versione di 'new' (in new.cpp, puoi ottenerlo entrando in una nuova chiamata). – mmurphy
@mmurphy: * Approssimativamente * simile a, sicuramente non identico a. –