具有可选所有权的智能指针

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被破坏时,它会破坏c1b1b2。理想情况下, 的销毁b2应该删除匿名C实例,但是 的销毁b1不应删除任何内容(因为c1将被 A 直接销毁)。

我可以使用什么样的智能指针来实现此目的?或者,最好的解决方案只是将所有权标志传递给 B 吗?

R S*_*ahu 1

虽然我担心可能会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)