什么是使用的优势,std::make_unique在new运营商的初始化std::unique_ptr?
换句话说,为什么
std::unique_ptr<SomeObject> a = std::make_unique(SomeObject(...))
Run Code Online (Sandbox Code Playgroud)
比做好
std::unique_ptr<SomeObject> a = new SomeObject(...)
Run Code Online (Sandbox Code Playgroud)
我尝试在线查看很多,我知道new在现代C++中避免使用操作符是一个很好的经验法则,但我不确定在这个确切的场景中有什么优势.它是否可以防止可能发生的任何类型的内存泄漏?做一个std::make_unique比使用更快new吗?
我今天和我的同事想知道是否可以实现std :: vector来利用小缓冲区优化.通过查看C++ 11草案,我在23.3.1p8阅读
表达式a.swap(b),对于除数组之外的标准容器类型的容器a和b,应交换a和b的值,而不对单个容器元素调用任何移动,复制或交换操作.
这开始似乎取决于小缓冲区优化,但在as-if规则下,我们将被允许仍然对非类类型进行小缓冲区优化(因为我们无法观察到正在完成的复制).下一个文字似乎更难"傻瓜"
在交换之前引用一个容器中的元素的每个迭代器应该在交换之后引用另一个容器中的相同元素.
这是否足以阻止为std :: vector实现小缓冲区优化?有没有其他的路障或最终有可能有SBO的std :: vector?