加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 你能禁止本地实例化吗?

发布时间:2020-12-16 10:36:47 所属栏目:百科 来源:网络整理
导读:我有一个自动过程监控的辅助类,因为它有点像“一次又一次忘掉”的机制,一个很大的缺陷就是你可以像这样使用它: MyClass c(process); 但是当c超出范围时,内部的线程停止,显然没有通知从它出来. 你应该怎么做是这样的: MyClass *c=new MyClass(process); 并
我有一个自动过程监控的辅助类,因为它有点像“一次又一次忘掉”的机制,一个很大的缺陷就是你可以像这样使用它:

MyClass c(process);

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

你应该怎么做是这样的:

MyClass *c=new MyClass(process);

并自己处理一生.

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

干杯!

Valmond

解决方法

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

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

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

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

private:
    ~MyStruct() {};

};

int main()
{
    MyStruct* s = new MyStruct;
    s->free();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读