如果我使用一个 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
的一个实现细节,事实上有一个 vector
的 shared_ptr
用于实现容器的 s 不应通过接口(interface)公开。
除非获得 NULL
有意义,否则不要返回指针来自 Container
.通常它不会。用户想要的只是访问容器的第 i-th 个元素,引用可以完美地做到这一点。
你真正想要的是 std::vector<std::unique_ptr<Foo>>
. Container
是管理内存的人,并在成员声明中这样说。其他人无权知道实现情况。
看看Boost.Pointainers如果您不愿意或不能使用 C++0x。
关于C++:访问 shared_ptr 的容器应该返回原始还是共享 ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3885580/