2013-12-17 23 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

第一个引用的是函数*中的对象*第二个制作对象的副本。 –