Val*_*ond 3 c++ multithreading scope instantiation
我有一个自动过程监控的辅助类,因为它有点像"一次又一次忘掉"的机制,一个很大的缺陷就是你可以像这样使用它:
MyClass c(过程);
但是当c超出范围时,内部的线程停止,显然没有通知从它出来.
你应该怎么做是这样的:
MyClass*c = new MyClass(process);
并自己处理一生.
是否有一种简单,好的方法,禁止本地实例化,只允许在c ++中使用"new"?
干杯!
Valmond
您可以将类的析构函数设置为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)