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

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

DDD
發布: 2024-12-29 02:35:09
原創
994 人瀏覽過

Why Can't I Directly Push a Unique Pointer into a Vector in C  ?

理解問題:將唯一指標插入向量

提供的程式碼嘗試將唯一指標推入向量。但是,錯誤訊息指出了編譯失敗的原因:

error: deleted function 'std::unique_ptr<int>::unique_ptr(const std::unique_ptr<int>&)'
登入後複製

出現此錯誤是因為不允許複製唯一指標。

唯一指標的本質

顧名思義,唯一的指標建立了動態記憶體位置的獨佔所有權。它保證只有一個唯一的指標容器擁有所持有的指標的所有權。因此,創建唯一指標的副本是不允許的。複製會導致兩個唯一指標聲明對相同動態記憶體的所有權,這違反了唯一所有權的固有規則。

相反,當需要將唯一指標的所有權轉移到另一個容器或函數時,移動C 的語意發揮作用。

解決問題:利用 Move 語意

編譯錯誤和推送問題的解決方案向量的獨特指標在於利用移動語意。使用 std::move 函數實現的移動語義,無需建立副本即可轉移唯一指標的所有權。

在這種情況下,更正的程式碼片段將是:

int main()
{
    std::vector<std::unique_ptr<int>> vec;

    int x(1);
    std::unique_ptr<int> ptr2x(new int(x)); // Allocate the object dynamically
    vec.push_back(std::move(ptr2x)); // Transfer ownership with move semantics

    return 0;
}
登入後複製

透過使用 std::move,ptr2x 的所有權轉移給 vec,並且 ptr2x 留下一個 nullptr。

以上是為什麼我不能直接將唯一指標推入 C 中的向量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板