你能禁止本地的实例化吗?

Val*_*ond 3 c++ multithreading scope instantiation

我有一个自动过程监控的辅助类,因为它有点像"一次又一次忘掉"的机制,一个很大的缺陷就是你可以像这样使用它:

MyClass c(过程);

但是当c超出范围时,内部的线程停止,显然没有通知从它出来.

你应该怎么做是这样的:

MyClass*c = new MyClass(process);

并自己处理一生.

是否有一种简单,好的方法,禁止本地实例化,只允许在c ++中使用"new"?

干杯!

Valmond

Sme*_*eey 6

您可以将类的析构函数设置为private(并为释放定义替代成员函数).这禁止任何类的直接堆栈实例化,只允许heap(new)实例化.

注意:这比将构造函数设置为私有更好,因为仍然可以直接创建对象而不是通过函数创建对象.此外,只有一个析构函数需要私有化,但可能有许多构造函数.

要执行删除,您可以实现以下内容:

struct MyStruct
{
    void free()
    {
        delete this;
    }

private:
    ~MyStruct() {};

};

int main()
{
    MyStruct* s = new MyStruct;
    s->free();
}
Run Code Online (Sandbox Code Playgroud)