use*_*112 1 c++ boost shared-ptr
我目前有矢量,如:
vector<MyClass*> MyVector;
Run Code Online (Sandbox Code Playgroud)
我访问使用
MyVector[i]->MyClass_Function();
Run Code Online (Sandbox Code Playgroud)
我想利用shared_ptr.这是否意味着我所要做的就是将我vector改为:
typedef shared_ptr<MyClass*> safe_myclass
vector<safe_myclass>
Run Code Online (Sandbox Code Playgroud)
我可以继续使用我之前的其余代码吗?
可能只是std::vector<MyClass>.你是
如果是这样,那么共享指针就是可行的方法,但是当人们根本不使用它时,人们会使用这种范例.
如果你做了改变就std::vector<MyClass>完成了如果你的代码后来变成多态的话可能会有一些难看的维护,但理想情况下你需要的所有改变都是改变你的typedef.
在这一点上,包装整个 std :: vector 可能是有意义的.
class MyClassCollection {
private : std::vector<MyClass> collection;
public : MyClass& at(int idx);
//...
};
Run Code Online (Sandbox Code Playgroud)
因此,您不仅可以安全地更换共享指针,还可以更换整个矢量.权衡更难以输入到期望向量的API,但是那些设计不合理,因为它们应该与您可以为您的类提供的迭代器一起使用.
可能这对你的应用程序来说太多了(虽然如果它将在面向客户的库中公开会是谨慎的)但这些都是有效的考虑因素.
小智 9
vector<shared_ptr<MyClass>> MyVector; 应该可以.
但是如果实例MyClass不在向量之外共享,并且您使用现代C++ 11编译器,vector<unique_ptr<MyClass>>则比shared_ptr(因为unique_ptr没有引用计数开销shared_ptr)更有效.
| 归档时间: |
|
| 查看次数: |
29890 次 |
| 最近记录: |