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()替换. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |