Limitations associated with returning a reference as opposed to a pointer
本问题已经有最佳答案,请猛点这里访问。
指针返回和引用返回有什么区别?在这两种情况下,地址都会返回给呼叫者,对吗?
根据这个小程序——显然是一样的——它输出一个整数的值。
是否存在通过引用而不是通过指针返回的限制?我的老师告诉我们——当你参照一个接受者返回时,接受者"借用"这个对象。另一方面,当你返回一个指针时——你将对象的所有权"转移"给接收者。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <iostream> using namespace std; class A { int x; public: A() : x(10) { } void print() { cout <<"x = :" << x << endl; } }; class B { int y; public: B() : y(30) { } void print() { cout <<"x = :" << y << endl; } A& create() { A* a = new A; return *a; } }; |
通过指针返回,然后我更改了代码的以下部分:
1 2 3 4 | A* create() { A* a = new A; return a; } |
总的来说:
1 | b.create()->print(); |
当您返回一个引用时,您将使用别名访问对象。就像你直接访问对象一样。
通过返回指针,可以复制(而不是传输)对象的地址。然后需要延迟指针以访问对象。
我想你可以看看像
引用始终被视为原始对象的别名,因此没有为引用分配单独的内存。其中as指针有一个单独的内存地址和对象的存储地址。