当在构造函数中将类作为参数传递时,我最终在大多数情况下会传递指针。主要原因是我必须传递无法实例化的抽象类,并且由于引用不能为空,我真的别无选择......
这是一个例子:
// 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
对象。
拥有健全的编程方法的最佳实践是什么?
使用
shared_ptr
表示共享所有权,使用 unique_ptr
表示唯一所有权。 如果您确定C
的生存期受A
对象(或拥有A
的另一个对象)的生存期限制,则可以使用引用或带有 nil 删除器的shared_ptr
。