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

c – 如何阻止在堆栈分配的对象上调用析构函数?

发布时间:2020-12-16 10:05:41 所属栏目:百科 来源:网络整理
导读:我有一个类似联合的类,其成员可能是垃圾,也可能不垃圾,具体取决于同一类中也设置的布尔标志. 显然,当我的课程超出范围时,我不希望破坏垃圾.如何防止类成员被破坏? 我知道这可以用指针和动态分配的内存来实现,但我正在寻找一个更简单的解决方案. class MyCon
我有一个类似联合的类,其成员可能是垃圾,也可能不垃圾,具体取决于同一类中也设置的布尔标志.

显然,当我的课程超出范围时,我不希望破坏垃圾.如何防止类成员被破坏?

我知道这可以用指针和动态分配的内存来实现,但我正在寻找一个更简单的解决方案.

class MyContainer {
    bool has_child;
    MyChild child;

public:
    MyContainer(MyChild child) { this->has_child = true; this->child = child; }
    MyContainer() { this->has_child = false; }

    ~MyContainer() {
        if (!this->has_child) {
            // What to do here?
        }
    }
}

解决方法

您可以使用 std::optional(自C 17起),这不会导致动态内存分配.例如

class MyContainer {
    bool has_child;
    std::optional<MyChild> child;

public:
    MyContainer(MyChild child) : child(child) { this->has_child = true; }
    MyContainer() { this->has_child = false; }

    ~MyContainer() { /* nothing special need to do */ }
};

BTW:成员has_child可以被std :: optional :: has_value()替换.

(编辑:李大同)

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

    推荐文章
      热点阅读