【发布时间】:2014-05-30 01:35:33
【问题描述】:
假设我有一个管理器类,其中包含某个对象的向量:
class SomeObjectManager
{
private:
std::vector<SomeObject> _heldObjects;
};
在那个类中,我有一些函数可以遍历所述向量以返回请求的对象。
SomeObject getSomeObjectByName(std::string nameToFind);
我需要知道什么时候适合使用智能指针。我真的应该返回类似下面的东西吗?
std::shared_ptr<SomeObject> getSomeObjectByName(std::string nameToFind);
或者我应该使用其他类似 unique_ptr 或 weak_ptr 的东西吗?我希望 SomeObjectManager 类拥有返回的实际对象,并且永远不会说 SomeObject 被删除,除非 Manager 这样做。
我在 C# 模式下呆了一段时间后,最近才回到 C++ 世界;感谢您的帮助并消除了我的困惑。
我已经阅读了很多关于此问题的信息,但从未真正找到针对我的具体情况的直接答案。
编辑#1
我想用这个来改写我最后几句话:
我希望 SomeObjectManager 类拥有正在返回的实际对象,并且从未说过 SomeObject 从向量中删除并随后被删除,超出范围,直到 Manager 强制它这样做。例如:
void SomeObjectManager::removeSomeObjectByName(const std::string& objectToRemove);
这只会遍历向量,找到SomeObject,然后将其从向量中删除。
【问题讨论】:
-
阅读
const并通过引用传递的好主意(&运算符) -
是的,我一直在阅读
const correctness。缓慢而坚定地试图重新站稳脚跟。
标签: c++ shared-ptr smart-pointers unique-ptr resource-management