假設我有一個具有以下定義的 A 類:
class A {
A(std::string& s) : text_(s) {}
private:
std::string& text;
}
請注意, A 包含對字串物件的參考。這可能是因為我們不想復制或移動物件。
現在,如果我有以下代碼
std::string text = "......";
std::unique_ptr<A>(new A(text));
// now I destroy text in some way, either explicitly call the deconstructor or it goes out of scope somehow
問題是 unique_ptr 的物件 A 現在發生了什么?A 包含對已洗掉物件文本的參考。unique_ptr 的 A 現在有一個懸空指標嗎?或者 unique_ptr 是否處理這種情況并延長包含原始指標的物件的生命周期?
uj5u.com熱心網友回復:
C 不是一種安全的語言。如果您有一個指向已銷毀物件的指標或參考,則使用該指標或參考是一個錯誤。
假設您實際上構造了一個Athat outlives text,它仍然會參考被銷毀的物件,并且對該成員的任何使用都是未定義的行為。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/385119.html
