我试图找出使用boost::shared_ptr作为类成员的最干净的实现方法。假设我有一个类A,其中包含对类B成员的boost::shared_ptr。 B类可以是基本类型(B)或派生类型(比如C或D)。该成员将在A类的整个生命周期中连续获得/设置(使用访问器/修饰符)。 B必须是多态的,所以我不能只是将其存储为B,而是将其作为B的引用/指针。我还希望避免也必须自己管理内存。假设一切看起来像:

class A
{
public:
    const B& GetB() const { const B* b = m_pB.get(); return *b; } // Is the correct way to do this?
    void SetB(const B& b) { B* b = m_pB.get(); *b = b; } // Is the correct way to do this?

private:
    boost::shared_ptr<B> m_pB;
};

我知道我可能做错了什么,但我想举一个例子说明我要完成的事情。谢谢!

最佳答案

我认为该程序的设计需要重新考虑。

共享指针的目的是将动态分配的资源保留在其中,以便它管理该资源的生命周期。如果要更改其中的内容,则在替换其中的指针之后,您有责任管理该资源的寿命,这将导致困惑。

您可能应该只在m_pB变量上分配一个新的共享指针,以便原始指针超出范围并释放最初保留的资源。因此,请分配共享指针,而不是共享指针。

10-02 01:07
查看更多