关于c ++:与返回引用而不是指针相关的限制

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();


当您返回一个引用时,您将使用别名访问对象。就像你直接访问对象一样。

通过返回指针,可以复制(而不是传输)对象的地址。然后需要延迟指针以访问对象。

我想你可以看看像std::unique_ptrstd::shared_ptr这样的智能指针来理解所有权的转移。


引用始终被视为原始对象的别名,因此没有为引用分配单独的内存。其中as指针有一个单独的内存地址和对象的存储地址。