为什么const_cast不允许使用unique_ptr?

时间:2016-07-10 03:08:50

标签: c++ c++11 casting const unique-ptr

我正在尝试const_cast unique_ptr并且它给了我错误:

  const std::unique_ptr<int> myptr;
  std::unique_ptr<int> myptr1 = std::move(const_cast<std::unique_ptr<int> >(myptr));

所以我想理解为什么const_cast不能与unique_ptr一起使用,如果它可以使用普通指针?

1 个答案:

答案 0 :(得分:3)

你可以const一个唯一的_ptr。你不能做的是从const unique_ptr移动,这是你的代码试图做的。你可以这样做:

vec.push_back(std::move(const_cast<std::unique_ptr<int>&>(myptr)));

当然,这是未定义的行为,因为你的unique_ptr实际上是const。如果myptr是对唯一不是const的unique_ptr的const引用,那么上面的代码就是安全的。

在新代码中

std::unique_ptr<int> myptr1 = std::move(const_cast<std::unique_ptr<int> >(myptr));

const cast尝试在将结果传递给myptr之前复制std::move。您需要将其强制转换为引用,以便不复制它。

std::unique_ptr<int> myptr1 = std::move(const_cast<std::unique_ptr<int>& >(myptr));
//                                                                     ^