C:访问shared_ptr的容器应该返回raw或shared ptr吗?

如果我使用shared_ptrs容器并明确允许访问其元素,如果我打算让容器成为负责“清理”的容器,我应该返回shared_ptrs或原始指针吗?

class Container
{
private:
    std:vector<shared_ptr<Foo> > foo_ptrs;

public:
    shared_ptr<Foo> operator[](std::size_t index) const {}; // or
    Foo* operator[](std::size_t index) const {};
};

有没有理由在这种情况下返回shared_ptrs,或者是原始指针好吗?

映入眼帘!

解决方法:

返回参考

如果您希望访问者在生命周期管理*享,则仅返回shared_ptr.这是一个有效的设计,但正如您所说,Container全权负责清理. shared_ptr只是Containter的一个实现细节,事实上不应该通过接口公开用于实现容器的shared_ptrs向量.

除非从Container获取NULL是有意义的,否则不要返回指针.通常它没有.所有用户想要的是访问容器的第i个元素,并且引用完美地完成.

你真正想要的是一个std :: vector< std :: unique_ptr< Foo>>.容器是管理内存的那个,并在成员声明中这样说.其他人都没有了解实施的业务.

如果您不愿意或无法使用C 0x,请查看Boost.Pointainers.

上一篇:c – 为什么不string :: data()提供一个Mutable char *?


下一篇:c – 铸造Derived **→Base **错了吗?有什么选择?