我试图找出使用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变量上分配一个新的共享指针,以便原始指针超出范围并释放最初保留的资源。因此,请分配共享指针,而不是共享指针。