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

some_vector.push_back(make_shared<ClassName>());
some_vector.emplace_back(make_shared<ClassName>());

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

回答

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

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


以上是将make_shared与emplace_back和push_back一起使用-有什么区别吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>