假设您要定义两个类A和B,并且B有一个指向A实例的指针,并负责管理该实例的生命周期。像这样:
class A;
class B
{
public:
B(A *a);
~B() { delete m_a; }
private:
A *m_a;
};
方法B::get_a
返回常量引用是否更合适:
const A &get_a() const
{
return *m_a;
}
或仅返回指针:
const A *get_a() const
{
return m_a;
}
答案 0 :(得分:1)
B有一个指向A实例的指针,并负责管理该实例的生存期。
B
是唯一指针的实现吗?标准std::unique_ptr
提供了唯一指针的实现。我建议使用它而不是B
。
方法B :: get_a返回常量引用是否更合适:
取决于m_a == nullptr
对B
是否有效。如果是这样,那么如果您想返回引用,就需要抛出这种情况。
答案 1 :(得分:0)
在语义上,指针与引用之间的区别在于指针可以为NULL。基本上,这取决于B类中的A *是否可以为NULL。如果是,则将代码保持不变并返回一个指针。如果不是,请更改B ctor以接受A对象的参数,在B ctor内的堆上创建A对象并返回引用。