He estado buscando asignadores personalizados y con bastante frecuencia los veo usando algún tipo de función para asignar memoria. Para propósitos de prueba y para educarme más a mí mismo, traté de hacer un ejemplo "simple" de hacerlo. Sin embargo, hay una cosa fundamental que entiendo sobre cómo hacer. Una de las diferencias clave en malloc
frente a new
es que con el nuevo se llama al constructor. ¿Qué pasaría si quisiera escribir mi propio asignador que esencialmente reemplazara new
, cómo haría que se llame al constructor cuando use malloc
?Callling object constructor/destructor con un asignador personalizado
Entiendo que en las clases puedo sobrecargar new
y delete
para la clase, así que supongo que una gran parte de la pregunta es, ¿cómo llama el new
al constructor de objetos durante la asignación? Del mismo modo, estoy interesado en cómo delete
llama al destructor.
Creé un código de prueba de muestra que esperaba que llamara el constructor SomeClass
durante la asignación, pero no veo cómo.
#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;
}
(Como nota, sé que sólo puede utilizar new
. Sin embargo, para los propósitos de aprendizaje Estoy intentando crear un asignador de costumbre que no sólo llamar new
o placement new
).
Si la ubicación nueva es lo que necesito usar, ¿cómo es que, por ejemplo,' new' de MSVC no llama a la ubicación nueva en su versión de 'new' (en new.cpp, puede obtenerla entrando en una nueva llamada) – mmurphy
@mmurphy: * Aproximadamente * similar a, definitivamente no idéntico a. –