【发布时间】:2023-03-17 03:20:01
【问题描述】:
在更改我的代码以使用唯一指针后,我偶然发现了如何将对象集合返回给客户端。一般来说,我想将对象作为引用或非拥有指针传递。但如果我有一个对象集合,我不能只返回对它的引用。
例如,我有一个包含对象集合的简单类,这些对象都创建一次,之后不会更改。
using ObjectUPtr = std::unique_ptr<Object>;
class MyClass
{
public:
const std::vector<Object*>& GetObjectsOldStyle() const
{
return mObjectsOldStyle;
}
const std::vector<VObjectUPtr>& GetObjectsNewStyleA() const
{
// I don't like that: The client should not see the unique_ptr ...
return mObjectsNewStyle;
}
std::vector<VObject*> GetObjectsNewStyleB() const
{
// Ok, but performance drops
std::transform(...); // Transform the collection and return a copy
}
const std::vector<VObject*>& GetObjectsNewStyleC() const
{
// Ok, only copied once, but two variables per collection needed
// Transform the collection and cache in a second vector<Object*>
std::transform(...);
}
std::vector<Object*> mObjectsOldStyle; // old-style owning pointers here
std::vector<ObjectUPtr> mObjectsNewStyle; // how I want to do it today
}
今天,我通常更喜欢 GetObjectsNewStyleB,但我想知道是否有更优雅和有效的方式或一般的最佳实践来返回此类集合。
【问题讨论】:
标签: c++ c++11 vector unique-ptr