与返回引用而不是指针相关的限制

时间:2014-05-06 09:39:51

标签: c++ pointers reference

通过指针返回和按引用返回有什么区别?在这两种情况下,地址都会返回给调用者,对不对?

根据这个小程序 - 它显然是相同的 - 它打印一个整数的值。

是否有关于通过引用返回而不是通过指针返回的限制? 我的老师告诉我们 - 当你通过参考接收器返回时,接收器"借用"物体。当你另一方面返回一个指针 - 你"转移"对象的所有权到接收者。

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

2 个答案:

答案 0 :(得分:3)

返回引用时,可以使用别名方式访问该对象。就像你直接访问对象一样。

通过返回指针,您复制(不传输)对象的地址。然后你需要指出访问对象的指针。

我认为您可以查看std::unique_ptrstd::shared_ptr等智能指针,以了解转让所有权。

答案 1 :(得分:0)

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