簡體   English   中英

為什么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轉換unique_ptr。 您不能做的就是從const unique_ptr移走,這是您的代碼嘗試執行的操作。 您可以這樣做:

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

當然,這是未定義的行為,因為您的unique_ptr實際上是const。 如果myptr相反是對unique_ptr的const引用,而實際上不是const,則上述內容是安全的。

在您的新代碼中

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

const myptr在將結果傳遞給std::move之前嘗試復制myptr 您需要將其強制轉換為參考,以便不進行復制。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM