首页 > 解决方案 > std::vector 的正确语法是什么>::push_back()?

问题描述

unique_ptr我已经读过,如果我想使用push_backfrom ,我需要为 a 定义一个删除器std::vector<std::unique_ptr<T>>。真的吗?如果是,那么正确的语法是什么?

谢谢您的回答

标签: c++c++11stdstdvectorunique-ptr

解决方案


不,在正常情况下您不需要自定义删除器。对于现有的unique_ptr

vector.push_back(std::move(ptr));

工作正常(将指针的所有权转移到vector);对于新指针:

vector.push_back(std::make_unique<MyType>(args, go, here));

是最安全的(因为它确保指针始终受到管理,即使push_back引发异常),具有:

vector.emplace_back(new MyType(args, go, here));

如果vector引发异常(例如,由于尝试扩展底层存储失败;但在这种情况下,您的程序可能无论如何都注定要失败,因此可能不值得捍卫反对)。


推荐阅读