将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_back和emplace_back。这是正确的,还是会有一些区别?
回答
vector<T>::push_back有一个T&&重载,它的作用与vector<T>::emplace_back T&&版本相同。
不同之处在于,emplace_back它将完美地将任何参数集转发给T的构造函数,而push_back只需要T&&或T const&。当您实际通过一个T&&或T const&标准规范时,它们的行为是相同的。
THE END
二维码