2017-05-04 36 views
-3

我剛剛穩定的情況是一個unique_pointer引用作爲函數參數傳遞。所以我看了一下,發現代碼實際上是在編譯和運行。C++ 11/14獨特的指針不那麼獨特?

這是爲什麼呢? 當你可以引用該指針時,指針是如何唯一的?

這裏我舉的例子:

class Foo{ 
    public: 
    int bar{23}; 
}; 

void Bar(std::unique_ptr<Foo>& a_foo){ 
    a_foo->bar = 42; 
} 

int main(int argc, char *argv[]){ 

    auto foo{ std::make_unique<Foo>() }; 
    Bar(foo); 
    std::cout << foo->bar << std::endl; //outputs 42 

    return 0; 
} 
+3

「獨特」是指「獨特的所有權」。 –

+0

做。你知道get方法嗎? – 2017-05-07 15:12:05

回答

5

如何唯一指針時,你可以有一個指針引用?

你可以儘可能多的引用那個指針,只要你喜歡,但其實只有其中的一個。

刪除&,以便您嘗試複製unique_ptr,並且您的程序不會生成。您不允許克隆/複製指針,以便有多個指向同一個事物。這就是「獨特」的含義。

+0

仍然不滿意.. –

+5

@ C.邁克爾:恐怕沒有什麼我可以做你的缺乏滿意度。 –

3

引用不會創建指針的新實例。僅僅因爲你可以參考指針並不意味着它不是唯一的。我可以用名字引用你的意思,這並不意味着我每次使用你的名字都克隆你。)C++中的引用是 - 在這方面 - 就像一個人的名字。

+1

一個很好的比喻! –

+0

感謝您的迴應,但是我想回答的問題,也許沒有正確的說法是:那不是獨特的指針背後的想法嗎?如果你可以在其他地方參考它的重點,你仍然可以改變它,爲什麼不使用共享? –

+2

@ C.Michael當您使用參考時,由您來確保參考不會成爲懸掛參考。換句話說,編譯器不能阻止你錯誤地設計你的軟件。如果你需要一個共享指針,不要因爲你期望編譯器強迫你,而是因爲它是正確的。 –