为什么 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));
// ^
我正在尝试 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));
// ^