我有一个类似工会的类,其成员可能是垃圾也可能不是垃圾,这取决于在同一类中还设置了布尔标志。
显然,当我的类超出范围时,我不希望破坏该垃圾。如何防止班级成员遭到破坏?
我知道可以通过指针和动态分配的内存来实现,但是我正在寻找一个更简单的解决方案。
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 */ }
};
顺便说一句:成员has_child
可以替换为std::optional::has_value()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句