在嘗試操作向量中的唯一指標時,程式設計師可能會遇到困難。本文旨在解釋為什麼會出現此問題並提供解決方案。
考慮以下程式碼片段:
std::vector<std::unique_ptr<int>> vec; int x(1); std::unique_ptr<int> ptr2x(&x); vec.push_back(ptr2x); // Error: Can't copy a unique_ptr
由於唯一指標的基本原理,此程式碼會產生錯誤。唯一的指標確保只有單一容器控制託管指標。因此,禁止複製或建立指向相同物件的多個唯一指標。
要解決此問題,我們必須使用移動構造函數,它將指標的所有權從一個唯一指標轉移到另一個唯一指標。以下是修正後的程式碼:
vec.push_back(std::move(ptr2x));
需要注意的是,使用唯一指標來管理指向局部變數的指標(例如提供的範例中的 x)是不正確的。局部變數是自動管理的,它們的生命週期在包含區塊完成時結束。相反,動態分配物件:
std::unique_ptr<int> ptr(new int(1));
在 C 14 中,我們可以使用 make_unique 進一步簡化:
make_unique<int>(5);
以上是為什麼不能直接將唯一指標推入向量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!