我正在尝试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一起使用,如果它可以使用普通指针?
答案 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));
// ^