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 条指令。它略有不同,但似乎还可以。

我在这里保存了我的实验。

有人可以指出是我遗漏了什么还是实际上是有意为之?

以上是unique_ptr的有效性的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>