处理抽象基类作为成员时的所有权问题

时间:2012-07-06 12:15:08

标签: c++ pointers constructor virtual ownership

当在构造函数中将类作为参数传递时,我在大多数情况下最终传递指针。主要原因是我必须传递无法实例化的抽象类,并且作为引用不能为null我真的没有选择...

这是一个例子:

// Abstract class A
class A { 
    virtual void foo() = 0;
};

class B : public A {
    void foo();
};

class C {
public:
    C(A* a) : _a(a) {};
private:
    A* _a;
};

在某些情况下,我希望C处理A对象_a指向(删除后将其删除),在其他情况下我希望C删除_a而不删除A对象。

采用合理的编程方法有哪些最佳做法?

1 个答案:

答案 0 :(得分:2)

使用shared_ptr表示共享所有权,unique_ptr表示独特的所有权。如果您确定C的生命周期受A对象(或拥有A的其他对象)生命周期的限制,那么您可以使用引用或{{1}用一个零删除器。