nne*_*neo 6 c++ smart-pointers
我试图允许一个类包含一个指针,该指针可以是自有指针或借用指针。在前一种情况下,它应该销毁所拥有的对象本身;在后一种情况下,它不应该破坏所指向的对象。
在代码中,我有类 A、B 和 C。我的目标是以下(简化的)定义,其中 B 是需要拥有指针的类:
class C {
...
};
class B {
C *c;
B(C *c) : c(c) {
}
};
class A {
C c1;
B b1, b2;
// b2 leaks pointer to C
A() : b1(&c1), b2(new C()) {
}
};
Run Code Online (Sandbox Code Playgroud)
当 的实例A被破坏时,它会破坏c1、b1和b2。理想情况下, 的销毁b2应该删除匿名C实例,但是 的销毁b1不应删除任何内容(因为c1将被 A 直接销毁)。
我可以使用什么样的智能指针来实现此目的?或者,最好的解决方案只是将所有权标志传递给 B 吗?
虽然我担心可能会B出现滥用行为,但您可以这样做:
class B {
C *c;
bool owned;
B(C& c) : c(&c), owned(false) {}
B(C *c) : c(c), owned(true) {}
~B() { if (owned) delete c; }
};
class A {
C c1;
B b1, b2;
A() : b1(c1), b2(new C()) {}
};
Run Code Online (Sandbox Code Playgroud)