如果我使用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.