第一次使用智能指针,我做对了吗?
First time using smart pointers, am I doing it correctly?
我有两个 class。一个创建资源,然后将其发送到另一个 class 存储它以供程序的不同部分访问。我做的是:
typedef std::shared_ptr<Object> ObjectPtr;
ObjectPtr CreatorClass::Create()
{
ObjectPtr(new Object);
// ...
return ObjectPtr;
}
void StorageClass::Store(ObjectPtr obj)
{
myVector.push_back(obj);
}
ObjectPtr StorageClass::Get(int index)
{
return myVector[index];
}
我的问题是:
- 我使用
shared_ptr
是正确的还是我应该使用其他东西?
- 我是否应该将
ObjectPtr
按值传递给 Store 函数并从 Get 函数传递?
Am I correct in using shared_ptr or should I use something else?
如果您需要共享所有权,您是对的。否则你就错了。
Should I be passing ObjectPtr by value to Store function
是的。尽管您可以仍然.push_back(std::move(obj))
避免不必要的复制。
and from Get function?
看你想不想
- 修改vector中原来的
shared_ptr
,然后return通过非常量引用,
- 观察一下,然后return通过const reference
- none 以上,即获取您自己的副本,然后按值 return。
嗯,一般来说,你做的不是很有效率。我看到代码有多个问题,几乎接近于反模式。
- 无所不在的创作者。我的天哪,我恨他们。有什么意义
'creator' 在你的例子中?为什么不能创建对象
直接用户?
- 商店功能。它有两个问题。首先,它除了将一个元素放入 vector 之外什么都不做,再加上姐妹 get,它
简单地提取。鉴于此,这两个功能应该被发送到
遇见他们的造物主(双关语意)。相反, myVector 应该是
暴露给 class 用户。否则,您将严重限制用户
经验(例如,他们怎么知道他们是否可以打电话
得到给定的索引?他们不知道向量的大小!)。避免
吸气剂和吸气剂。
- Store 的第二个问题 - 如果我们想象 Store 不仅仅是将东西推送到 vector,因此它的存在是合理的,
它按值接受共享指针。这意味着,你是原子的
递增计数器。性能哭泣。传递共享指针
减少影响的参考。更好的是,不要使用共享
点子。在我见过的 99% 的情况下,这种用法是不合理的。
我有两个 class。一个创建资源,然后将其发送到另一个 class 存储它以供程序的不同部分访问。我做的是:
typedef std::shared_ptr<Object> ObjectPtr;
ObjectPtr CreatorClass::Create()
{
ObjectPtr(new Object);
// ...
return ObjectPtr;
}
void StorageClass::Store(ObjectPtr obj)
{
myVector.push_back(obj);
}
ObjectPtr StorageClass::Get(int index)
{
return myVector[index];
}
我的问题是:
- 我使用
shared_ptr
是正确的还是我应该使用其他东西? - 我是否应该将
ObjectPtr
按值传递给 Store 函数并从 Get 函数传递?
Am I correct in using shared_ptr or should I use something else?
如果您需要共享所有权,您是对的。否则你就错了。
Should I be passing ObjectPtr by value to Store function
是的。尽管您可以仍然.push_back(std::move(obj))
避免不必要的复制。
and from Get function?
看你想不想
- 修改vector中原来的
shared_ptr
,然后return通过非常量引用, - 观察一下,然后return通过const reference
- none 以上,即获取您自己的副本,然后按值 return。
嗯,一般来说,你做的不是很有效率。我看到代码有多个问题,几乎接近于反模式。
- 无所不在的创作者。我的天哪,我恨他们。有什么意义 'creator' 在你的例子中?为什么不能创建对象 直接用户?
- 商店功能。它有两个问题。首先,它除了将一个元素放入 vector 之外什么都不做,再加上姐妹 get,它 简单地提取。鉴于此,这两个功能应该被发送到 遇见他们的造物主(双关语意)。相反, myVector 应该是 暴露给 class 用户。否则,您将严重限制用户 经验(例如,他们怎么知道他们是否可以打电话 得到给定的索引?他们不知道向量的大小!)。避免 吸气剂和吸气剂。
- Store 的第二个问题 - 如果我们想象 Store 不仅仅是将东西推送到 vector,因此它的存在是合理的, 它按值接受共享指针。这意味着,你是原子的 递增计数器。性能哭泣。传递共享指针 减少影响的参考。更好的是,不要使用共享 点子。在我见过的 99% 的情况下,这种用法是不合理的。