返回"大型"私人会员的良好做法是什么?

nya*_*god 3 c++ return private

typedef std::vector <std::vector <int>> DataType;

class MyClass
{
public:
    const DataType &getData() const;
    DataType getData2() const;

private:
    DataType data;
};

const DataType &MyClass::getData1() const
{
    return data;
}

DataType MyClass::getData2() const
{
    return data;
}
Run Code Online (Sandbox Code Playgroud)

我应该避免使用getData1()来复制它吗?更喜欢const引用而不是getData2()是否有任何性能优势?我应该如何从课堂上归还这样的"大"私人会员?

das*_*ght 5

区别在于用户可以对您做什么DataType:

  • getData1它们只能拨打成员函数标记const,并访问成员变量,就好像它们被宣布恒定的,并且仅返回的参考对象的寿命期间.
  • getData2用户可以拨打他们希望的任何方法,并根据需要进行修改.

使用的价格getData2是复制:如果DataType有一个昂贵的复制构造函数,调用可能会变得更加昂贵.

您可以通过实施写时复制策略以及通过引用计数共享数据来改进这一点.当然,用户可以通过调用常量引用上的复制构造函数来手动复制:

DataType dtCopy(obj.getData1());
Run Code Online (Sandbox Code Playgroud)

  • 用户总是可以复制getData1()的结果,因此getData2()不会(真的)允许他们做更多的事情. (4认同)