[英]shared_ptr with vector
我目前有矢量,例如:
vector<MyClass*> MyVector;
我使用
MyVector[i]->MyClass_Function();
我想使用shared_ptr
。 这是否意味着我要做的就是将vector
更改为:
typedef shared_ptr<MyClass*> safe_myclass
vector<safe_myclass>
我可以继续使用以前的其余代码吗?
可能只是std::vector<MyClass>
。 你是
如果是这样,那么共享指针就是要走的路,但是当人们根本无法从中受益时,人们通常会使用这种范例。
为了完整std::vector<MyClass>
如果您确实更改为std::vector<MyClass>
,则在代码后来变为多态时,可能要进行一些丑陋的维护,但是理想情况下,您需要做的所有更改就是更改typedef。
在这一点上,包装整个 std :: vector可能很有意义。
class MyClassCollection {
private : std::vector<MyClass> collection;
public : MyClass& at(int idx);
//...
};
因此,您不仅可以安全地交换共享指针,还可以安全地交换整个向量。 折衷很难输入到需要向量的API中,但是由于它们与可为您的类提供的迭代器一起使用,因此设计不当。
这可能对您的应用程序来说是太多的工作(尽管如果将它公开在面向客户的库中是谨慎的),但这是有效的考虑因素。
vector<shared_ptr<MyClass>> MyVector;
应该可以。
但是,如果的实例MyClass
不载体外共享,并且使用现代C ++编译器11, vector<unique_ptr<MyClass>>
是比更有效shared_ptr
(因为unique_ptr
不具有的引用计数开销shared_ptr
) 。
不要立即跳转到共享指针。 如果需要避免复制对象,则可能更适合使用简单的指针容器 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.