C ++, предотвращающий создание экземпляра класса в стеке (во время компиляции)
Я знаю, что есть методы, чтобы предотвратить создание класса в куче, предотвращая использование пользователемnew
а такжеdelete
оператор. Я пытаюсь сделать прямо противоположное. У меня есть класс, который я хочу предотвратить, чтобы пользователь создал его экземпляр в стеке, и только те экземпляры, которые были инициированы с использованиемnew
Оператор скомпилирует. В частности, я хочу, чтобы следующий код получал ошибку во время компиляции:
MyClass c1; //compilation error
MyClass* c1 = new MyClass(); //compiles okay
Из поиска в Интернете я нашел это предложение о том, как это сделать:
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();
}
Я не понимаю, почему это должно работать. Зачем вызывать деструктор при создании экземпляраMyClass
?