【发布时间】:2020-01-02 10:43:09
【问题描述】:
我有一个包含共享指针向量的简单类:
class Bar {
public:
/* stuff */
private:
std::vector<std::shared_ptr<Foo>> foos;
};
我希望通过getFoos() 函数公开我的foos,该函数不会共享对象的所有权。一种方法是:
std::vector<std::reference_wrapper<Foo>> Bar::getFoos() const {
std::vector<std::reference_wrapper<Foo>> fooRefs;
fooRefs.reserve(foos.size());
for (auto& ptr : foos) {
fooRefs.push_back(std::ref(*ptr));
}
return fooRefs;
}
但这很丑。另外,我很可能需要缓存结果,因为这个函数经常被调用。更复杂,更丑陋。
有没有更清洁/更好的方法来处理这个问题?
【问题讨论】:
-
为什么不
const std::vector<std::shared_pointer<Foo>>& getFoos() const { return foos; }?此时,这还不是共享所有权,而只是对原始的 const 引用。 -
也许您可以提供一个名为
Foo& getFoo(std::size_t index);的方法并通过它公开Foo? -
std::vector<std::weak_ptr<Foo>> getFoos()怎么样?
标签: c++ vector shared-ptr smart-pointers