【发布时间】:2018-11-24 06:08:17
【问题描述】:
我遇到了这个答案Prevent moving of a unique_ptr C++11。但是,在在线编译器上试用它时,这适用于 C++11(std::move 编译器错误),但对于 C++17,我看到下面的 std::move 是成功的。编译器不应该在该行抛出错误吗?此外,如果 C++17 中的某些语义发生了变化,那么在 C++17 及更高版本中创建不可移动的 unique_ptr 的正确方法是什么。
template <typename T>
using scoped_ptr = const std::unique_ptr<T>;
int main()
{
auto p = scoped_ptr<int>(new int(5));
auto p2 = std::move(p); // should be error?
std::cout << *p2 << std::endl; // 5
return 0;
}
您可以在线试用here。
【问题讨论】:
标签: c++ c++11 c++17 unique-ptr