我现在有载体,如:
vector<MyClass*> MyVector;
我访问使用
MyVector[i]->MyClass_Function();
我想利用shared_ptr
。 这是否意味着所有我需要做的就是改变我的vector
到:
typedef shared_ptr<MyClass*> safe_myclass
vector<safe_myclass>
我可以继续使用我的代码的其余部分,因为它以前?
我现在有载体,如:
vector<MyClass*> MyVector;
我访问使用
MyVector[i]->MyClass_Function();
我想利用shared_ptr
。 这是否意味着所有我需要做的就是改变我的vector
到:
typedef shared_ptr<MyClass*> safe_myclass
vector<safe_myclass>
我可以继续使用我的代码的其余部分,因为它以前?
vector<shared_ptr<MyClass>> MyVector;
应该可以。
但是,如果的实例MyClass
不载体外共享,并且使用现代C ++编译器11, vector<unique_ptr<MyClass>>
是比更有效shared_ptr
(因为unique_ptr
不具有的引用计数开销shared_ptr
) 。
可能只是std::vector<MyClass>
。 你是
如果是这样那么共享指针是要走的路,但往往人们用这种模式时,它并没有将它们都受益。
是完整的,如果你不改变std::vector<MyClass>
你可能有一些丑陋的保养做,如果你的代码以后成为多态的,但最好你需要的所有的变化是改变你的typedef。
除了这一点,它可能是有意义的包装你的整个的std ::向量。
class MyClassCollection {
private : std::vector<MyClass> collection;
public : MyClass& at(int idx);
//...
};
所以,你可以放心地换出,不仅共享指针,但整个向量。 权衡是很难输入到期望的向量的API,但这些都是设计不当的,因为他们应该与迭代器,你可以为你的班上做。
可能这是你的应用程序的工作太多了,但这些都是有效的考虑(虽然如果它要在客户面临的一个库被暴露要谨慎)。
不要马上到共享指针。 你可能会更适合用一个简单的指针容器 ,如果你需要避免复制对象。