Sé que hay métodos para evitar que una clase se cree en el montón evitando que el usuario use el operador new
y delete
. Estoy tratando de hacer todo lo contrario. Tengo una clase en la que quiero evitar que el usuario cree una instancia de la misma en la pila, y solo se compilarán las instancias iniciadas con el operador new
. Más específicamente, quiero el código siguiente para recibir un error durante la compilación:C++, evitando que se cree una instancia de clase en la pila (durante la compilación)
MyClass c1; //compilation error
MyClass* c1 = new MyClass(); //compiles okay
De buscar en la web, me encontré con esta sugerencia sobre cómo hacerlo:
class MyClass {
public:
MyClass();
private:
void destroy() const { delete this; }
...
private:
~MyClass();
};
int main(int argc,char** argv)
{
MyClass myclass; // <--- error, private destructor called here !!!
MyClass* myclass_ptr = new MyClass;
myclass_ptr->destroy();
}
Lo que no entiendo es por eso que esto debería funcionar. ¿Por qué se llamaría al destructor al crear una instancia de MyClass
?
llamando a destrory() como este también le dará un error de compilación ya que está declarado privado –
Me gustaría saber por qué quiere esto? – log0
vea mi otra pregunta, que lo explica detalladamente: http: // stackoverflow.com/questions/3095856/prevention-unaligned-data-on-the-heap – eladidan