我现在有载体,如:shared_ptr的矢量与
vector<MyClass*> MyVector;
,我访问使用
MyVector[i]->MyClass_Function();
我想利用shared_ptr
。这是否意味着所有我需要做的就是改变我vector
到:
typedef shared_ptr<MyClass*> safe_myclass
vector<safe_myclass>
,我可以继续使用我的代码的其余部分,因为它以前?
我现在有载体,如:shared_ptr的矢量与
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>
,那么如果代码稍后变为多态,可能会有一些难以维护的操作,但理想情况下,您需要的所有更改都是更改typedef。
沿着这一点,它可能是有道理的包装你的整个 std :: vector。
class MyClassCollection {
private : std::vector<MyClass> collection;
public : MyClass& at(int idx);
//...
};
因此,您不仅可以安全地换出共享指针,而且还可以换出整个向量。对于期望向量的API,权衡更难以输入,但是那些设计不合适,因为它们应该使用可以为您的类提供的迭代器。
可能这对于您的应用程序来说工作太多(尽管如果将要在面向客户端的库中公开它将是明智的),但这些都是有效的考虑因素。
我使用了矢量
作为一个容器比链接更容易链接列表呢? – djechlin
看起来像你有一些错别字,并使用C#语法:'private'和'public'后面应该跟着“:”。 – 2012-05-28 22:32:01
不要立即跳转到共享指针。如果您需要避免复制对象,则可能更适合使用简单的pointer container。
最好是'shared_ptr' –
好的,但会shared_ptr允许我复制矢量而不是矢量?我没有在我的代码中使用任何多态。 –
user997112
'shared_ptr'已经是一个指针了,一个指向'MyClass'对象的共享指针。 'shared_ptr '将是一个指向指针的指针,或者是'MyClass **'的原始等价物。 –