c ++ 17:自动从std :: unique_ptr移至std :: shared_ptr

时间:2018-12-31 18:37:09

标签: c++ c++17 shared-ptr unique-ptr

我和我的同事正在使用更新的GCC 8.2编译器进行开发。以前一直在-std=c++11上使用GCC 4.8。我很惊讶地发现,在GCC 8.2中,unique_ptr会自动传输到shared_ptr。参见以下最小示例:

#include <iostream>
#include <memory>

using namespace std;

shared_ptr<int>
getMeAnInt()
{
    auto ret = unique_ptr<int>(new int(32));
    return ret;
}


int main()
{
    auto i = getMeAnInt();

    cout << *i << endl;
}

使用GCC 4.8,此操作无法编译,因为在返回ret以将unique_ptr转移到shared_ptr时,需要显式的std :: move。在GCC 8.2中,它可以编译并正常工作。

GCC 4.8失败: https://godbolt.org/z/I4g9dI

相同的代码,但在GCC 8.2中成功: https://godbolt.org/z/ZeDajS

我认为这是一个有意的更改,但是有人可以向我解释更改背后的原因吗?到目前为止,我一直以这样一个假设为前提,即明确的std::move要求是有价值的编译器强制执行,以明确表明所有权正在转移。

0 个答案:

没有答案