将 make_shared 与 emplace_back 和 push_back 一起使用 - 有什么区别吗?

Joh*_*ohy 1 c++ vector make-shared c++11 c++17

some_vector.push_back(make_shared<ClassName>());
some_vector.emplace_back(make_shared<ClassName>());
Run Code Online (Sandbox Code Playgroud)

我想检查一下我的理解是否正确,对于make_shared返回对象的所有其他函数,这两个调用是相同的。这里make_shared将创建一个新的shared_ptr,然后这个指针都将在被转移到容器中push_backemplace_back。这是正确的,还是会有一些区别?

Yak*_*ont 6

vector<T>::push_back有一个T&&重载,它的作用与vector<T>::emplace_back T&&版本相同。

不同之处在于,emplace_back它将完美地将任何参数集转发给T的构造函数,而push_back只需要T&&T const&。当您实际通过一个T&&T const&标准规范时,它们的行为是相同的。