[英]C++: Moving to unique_ptr
我的问题是我是前端开发人员,但我需要向 C++ 项目添加更改。
那是怎么回事:
std::vector<myObject*> myArray;
...
myArray.push_back(new myObject);
...
myArray.back();
我如何尝试改变它:
std::vector<std::unique_ptr<myObject>> myArray;
...
myArray.push_back(std::unique_ptr<myObject> (new myObject));
...
myArray.back().get(); // this place looks not good in my opinion :)
许多函数应该得到myObject*
。 而且我不知道如果我改变函数的参数会有多少变化。
在这种情况下,您能否建议如何正确获取指针?
正如评论中提到的,你应该使用
myArray.push_back(std::make_unique<myObject>());
(或emplace_back
而不是push_back
)而不是new
。 应尽可能避免直接使用new
。
你不应该经常在std::unqiue_ptr
上调用.get()
。
您可以使用*
获取对存储对象的引用:
auto& reference_to_object = *myArray.back();
您可以直接通过->
访问成员:
myArray.back()->some_function();
只有当你需要一个非拥有指针(它应该比引用少得多)你才需要调用.get()
:
auto ptr_to_object = myArray.back().get();
或者你可以使用
auto ptr_to_object = &*myArray.back();
为此(除非在极不可能的情况下operator&
为myObject
重载)。
我认为问题是正如你所说的“很多函数应该得到myObject*
”。 这应该比你说的要少得多。 只有也接受空指针作为参数的函数才应该将指针作为参数。 否则应首选参考文献。 前者不会经常发生。
另请注意,您确实应该有充分的理由在std::vector
内使用(智能)指针。 不只使用std::vector<myObject>
原因很少,例如myObject
不可移动、移动成本非常高、以多态方式使用myObject
或在添加元素时要求对所包含对象的引用不失效/移除。 (尽管std::list
在后一种情况下可能效果更好。)如果这些都没有,或者我忘记提及的其他原因,请应用,只需使用std::vector<myObject>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.