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

耶罗恩

我有一个类似工会的类,其成员可能是垃圾也可能不是垃圾,这取决于在同一类中还设置了布尔标志。

显然,当我的类超出范围时,我不希望破坏该垃圾。如何防止班级成员遭到破坏?

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

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?
        }
    }
}
songyuanyao

您可以使用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 */ }
};

顺便说一句:成员has_child可以替换为std::optional::has_value()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

返回的结构调用它自己的析构函数,该析构函数销毁分配的对象

是否可以在放置新分配的对象上不调用析构函数?

关于析构函数调用,堆栈展开如何工作?

使用Vector创建对象时如何调用析构函数

在函数调用期间析构对象

std::map 对象析构函数被调用?

C ++为什么在堆栈中构造完对象后立即调用析构函数?

如何为指针分配析构函数?

为对象分配值时为什么调用构造函数和析构函数

受保护的析构函数禁止在堆栈上创建派生类的对象?

析构函数调用

C ++如何自动调用析构函数?

如何指定析构函数调用的顺序?

为什么分配操作完成后调用对象的析构函数

当包含它的对象调用其析构函数时,unique_ptr是否会取消分配?

C ++-析构函数何时调用已使用但未分配的对象?

返回堆栈变量时停止调用析构函数

为什么在此处调用析构函数以及在调用该对象析构函数后如何调用对象成员函数?

默认析构函数在互斥体上被阻止

如何在移动分配运算符中调用析构函数?

vector :: clear如何在不丢失分配的内存的情况下调用析构函数

为什么在复制分配期间调用析构函数?

指向包含std :: string的对象的指针上的无效指针调用析构函数

对象数组上的析构函数,这些对象已经被分解

如何在动态数组中的某些对象上调用析构函数

C ++:析构函数在对象范围之外被调用?

调用类型嵌套在类内部的对象析构函数?

C ++:删除对象而不调用析构函数

析构函数使用静态对象调用两次