当在构造函数中将类作为参数传递时,我在大多数情况下最终传递指针。主要原因是我必须传递无法实例化的抽象类,并且作为引用不能为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
对象。
采用合理的编程方法有哪些最佳做法?
答案 0 :(得分:2)
使用shared_ptr
表示共享所有权,unique_ptr
表示独特的所有权。如果您确定C
的生命周期受A
对象(或拥有A
的其他对象)生命周期的限制,那么您可以使用引用或{{1}用一个零删除器。