【问题标题】:Reassigning unique_ptr重新分配 unique_ptr
【发布时间】:2015-09-23 07:08:13
【问题描述】:

在此代码上 Jetbrains CLion 抱怨 'unique_ptr::operator=(const unique_ptr &)' is deleted:

std::unique_ptr<std::string> test;
test = std::make_unique<std::string>();

但是关于这个:

auto test2 = std::make_unique<std::string>();

没有抱怨。

CLion 对还是错?可以重新分配unique_ptr吗?

upd GCC、CLang、MSVC++编译OK,任何C++14编译器都必须编译。这只是对 CLion 的好奇。

【问题讨论】:

  • CLion 似乎无法正确识别表达式的值类别
  • 尝试编译代码。除非有实际的编译器支持,否则 IDE 是愚蠢的,不要听他们的。在这种情况下,错误消息完全具有误导性并且错误。
  • @TheParamagneticCroissant 编译正常,更新帖子
  • @vladon 那么这是一个 IDE 错误。

标签: c++ c++14 unique-ptr clion


【解决方案1】:

代码很好,应该可以编译(确实可以);这是a bug in the IDE

关于复制赋值操作符的错误信息完全是误导;虽然复制赋值运算符删除,但移动赋值运算符未被删除,在这种情况下,它将被调用,因为make_unique() 按值返回unique_ptr,这是一个右值。

【讨论】:

  • 难道连作业都不能优化了吗? IE。技术上也不需要移动赋值运算符,具体取决于编译器。
  • @user673679 可以优化出来;但是,这是一个实现细节,不应成为代码编译或不编译的原因。
猜你喜欢
  • 2020-12-04
  • 2016-04-25
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 2013-04-10
  • 2017-08-12
  • 1970-01-01
相关资源
最近更新 更多