繁体   English   中英

C++:转移到 unique_ptr

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM