2013-12-17 54 views
0

考慮兩種情況:參考VS設置一個局部變量

  1. Object& obj = *getObjectPtr();
  2. Object obj = *getObjectPtr();

的是這兩個C++之間的區別?

+3

這在任何介紹性的C++書中都有介紹:http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list –

回答

4

行(1)在語義上等同於Object *obj_p = getObjectPtr(),然後使用*obj_p。引用的行爲像一個指針,但沒有指針語法。更多的例子在這裏:(2)http://en.wikipedia.org/wiki/Reference_%28C++%29

行將會導致一個新的Object被創建,並在Object的內存地址getObjectPtr()通過複製到它(可能)Object的拷貝構造函數。

1

Object& obj = *getObjectPtr(); - obj會將reference保留爲由getObjectPtr()返回的原始對象。

Object obj = *getObjectPtr(); - obj將持有由getObjectPtr()返回的原始對象的副本。

+0

第一個引用的是函數*中的對象*第二個製作對象的副本。 –