c ++存储引用返回的私有变量的正确方法

时间:2013-09-05 14:12:40

标签: c++ reference

考虑这个课程:

class example
{

    inline const A& GetA()
    {
        return _a;
    }

private:
    A _a;
};

使用以下代码:

example Ex;
A& a = Ex.GetA();

_a将通过引用返回,而不会复制_a。

我的问题是如果我按如下方式删除引用运算符会发生什么:

example Ex;
A a = Ex.GetA();

a_a的引用还是_a的副本?

3 个答案:

答案 0 :(得分:4)

如果存在可访问的复制构造函数,则它将是副本,否则将是编译错误。如果您将变量声明为一个变量,则该变量只是一个参考。

答案 1 :(得分:1)

在第二个示例中,您已声明了一个局部变量(不是引用),因此您将获得从函数返回的参考值的副本

那说:不要这样做。通过非const引用返回的公共非const方法仅比具有复杂性成本的公共成员的结构更好一步。只需使用带有公共成员的结构和直接访问,或者正确封装数据。

答案 2 :(得分:0)

您可以通过此代码示例进行简单检查:

#include <iostream>

class A {
public:
    A() {
        std::cout << "Creating A from default ctor" << std::endl;
    }
    A(const A &) {
        std::cout << "A copy created!" << std::endl;
    }
};

class Example {
public:
        inline A& getA() {
            return _a;
        }

    private:
        A _a;
};

int main() {
Example a;
A aa = a.getA();

return 0;
}