unique_ptr的有效性
我喜欢std::unique_ptr在 c++11 中看到它的那一刻,但我质疑它的有效性很长一段时间。(有关实时代码的链接,请参见下面的链接):
#include <memory>
std::unique_ptr<int> get();
extern std::unique_ptr<int> val;
void foo()
{
val = get();
}
这给了我关于 last clang 的 16 条指令-O3。但更有趣的是,它生成了两个对 的调用delete,即使第二个永远不会被调用。
比我尝试这样做:
void foo()
{
auto ptr = get().release();
val.reset(ptr);
}
突然间只有 11 条指令。然后我更深入地破解了 unique_ptr move ctor。最初它是作为reset(__u.release());. 我基本上只是按如下方式重新排序:
auto& ptr = _M_ptr();
if (ptr)
_M_deleter()(ptr);
ptr = __u.release();
Aaand.... 手动管理版本中的 11 条指令。它略有不同,但似乎还可以。
我在这里保存了我的实验。
有人可以指出是我遗漏了什么还是实际上是有意为之?