通过引用返回拥有的指针

时间:2018-10-31 15:18:21

标签: c++ c++11

假设您要定义两个类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;
}

2 个答案:

答案 0 :(得分:1)

  

B有一个指向A实例的指针,并负责管理该实例的生存期。

B是唯一指针的实现吗?标准std::unique_ptr提供了唯一指针的实现。我建议使用它而不是B

  

方法B :: get_a返回常量引用是否更合适:

取决于m_a == nullptrB是否有效。如果是这样,那么如果您想返回引用,就需要抛出这种情况。

答案 1 :(得分:0)

在语义上,指针与引用之间的区别在于指针可以为NULL。基本上,这取决于B类中的A *是否可以为NULL。如果是,则将代码保持不变并返回一个指针。如果不是,请更改B ctor以接受A对象的参数,在B ctor内的堆上创建A对象并返回引用。