通过指针返回和按引用返回有什么区别?在这两种情况下,地址都会返回给调用者,对不对?
根据这个小程序 - 它显然是相同的 - 它打印一个整数的值。
是否有关于通过引用返回而不是通过指针返回的限制? 我的老师告诉我们 - 当你通过参考接收器返回时,接收器"借用"物体。当你另一方面返回一个指针 - 你"转移"对象的所有权到接收者。
#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;
}
};
通过指针返回,然后我改变了代码的这些部分:
A* create() {
A* a = new A;
return a;
}
主要是:
b.create()->print();
答案 0 :(得分:3)
返回引用时,可以使用别名方式访问该对象。就像你直接访问对象一样。
通过返回指针,您复制(不传输)对象的地址。然后你需要指出访问对象的指针。
我认为您可以查看std::unique_ptr
和std::shared_ptr
等智能指针,以了解转让所有权。
答案 1 :(得分:0)
引用始终被视为原始对象的别名,因此没有分配给引用的单独内存。指针有一个单独的内存地址和存储对象的地址。