首頁 >後端開發 >C++ >為什麼不能直接將唯一指標推入向量?

為什麼不能直接將唯一指標推入向量?

Susan Sarandon
Susan Sarandon原創
2024-12-25 02:15:13807瀏覽

Why Can't I Directly Push Unique Pointers into Vectors?

將唯一指標推入向量時出現問題

在嘗試操作向量中的唯一指標時,程式設計師可能會遇到困難。本文旨在解釋為什麼會出現此問題並提供解決方案。

考慮以下程式碼片段:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn