【发布时间】:2020-05-30 03:31:41
【问题描述】:
在 c++14 中,分配给现有的 unique_ptr 有什么区别:
std::unique_ptr<double> p = std::make_unique<double>(1.0);
p = std::make_unique<double>(2.0);
在分配给它之前首先调用reset:?
std::unique_ptr<double> p = std::make_unique<double>(1.0);
p.reset();
p = std::make_unique<double>(2.0);
我认为在赋值之前添加.reset() 不会对代码产生很大影响,但是没有reset() 的那个在使用-O3 编译时似乎会产生不同(甚至更多)的汇编代码。在线查看代码:
【问题讨论】:
-
您所说的“等效”是什么意思?在第二个版本中,您将 ptr 重置两次,在第一个版本中,只需一次,因此产生不同的汇编代码是正常的。
-
你为什么要做第二个?充其量它的性能相当,但也可能更糟,更不用说整体可读性更差了。
-
一页二编译器两个版本godbolt.
标签: c++ c++14 reset unique-ptr