为什么 const_cast 不能用于 unique_ptr?

why const_cast is not allowed for 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 一起工作,如果它可以与普通指针一起工作?

你可以 const cast a unique_ptr。您不能做的是从 const unique_ptr 移动,这是您的代码试图做的。不过你可以这样做:

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

当然,这是未定义的行为,因为您的 unique_ptr 实际上是常量。如果 myptr 是对 unique_ptr 的 const 引用,而实际上不是 const,那么上面的内容是安全的。

在您的新代码中

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

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

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