【发布时间】:2010-06-22 10:25:45
【问题描述】:
我知道有一些方法可以阻止在堆上创建类,方法是阻止用户使用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 的实例时会调用析构函数?
【问题讨论】:
-
顺便说一句,像这样调用 destrory() 也会给你一个编译器错误,因为它被声明为私有
-
我很想知道你为什么想要这个?
-
查看我的另一个问题,它彻底解释了它:stackoverflow.com/questions/3095856/…
标签: c++ class-design