So che esistono metodi per impedire la creazione di una classe nello heap, impedendo all'utente di utilizzare l'operatore new
e delete
. Sto cercando di fare esattamente il contrario. Ho una classe che voglio impedire all'utente di creare un'istanza di esso nello stack e che verranno compilate solo le istanze istigate usando l'operatore new
. Più in particolare, voglio il seguente codice per ricevere un errore durante la compilazione:C++, impedendo la creazione di istanze di classe nello stack (durante la compilazione)
MyClass c1; //compilation error
MyClass* c1 = new MyClass(); //compiles okay
Dalla ricerca sul web, ho trovato questo suggerimento su come farlo:
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();
}
Quello che non capisco è perché questo dovrebbe funzionare. Perché dovrebbe essere chiamato il distruttore durante la creazione di un'istanza di MyClass
?
dal modo in cui chiamare destrory() come questo ti darà anche un errore del compilatore dato che è dichiarato privato –
Sarei interessato a sapere perché lo vuoi? – log0
vedi la mia altra domanda, che lo spiega a fondo: http: // stackoverflow.it/questions/3095856/prevention-unaligned-data-on-the-heap – eladidan