C++通过引用返回

Gok*_*kul 1 c++ reference

说,我有一个函数,它返回一个引用,我想确保调用者只将它作为引用,不应该作为副本接收它.这在C++中是否可行?

为了更清楚.我有这样的课.

class A
{
private:
    std::vector<int>  m_value;
    A(A& a){ m_value = a.m_value; }

public:
    A() {}
    std::vector<int>& get_value() { return m_value; }
};

int main()
{
    A a;
    std::vector<int> x = a.get_value();
    x.push_back(-1);
    std::vector<int>& y = a.get_value();
    std::cout << y.size();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

谢谢,Gokul.

Bri*_*ndy 13

通过使类不可复制,您可以为自己的类执行所需的操作.

您可以通过将复制构造函数和operator =作为私有或受保护的成员来使类不可复制.

class C
{
private:
  C(const C& other); 
  const C& operator=(const C&);

};
Run Code Online (Sandbox Code Playgroud)

这里有一个很好的例子,可以在这里创建一个NonCopyable类,你可以从你自己的类型派生出来.

如果你正在使用boost,你也可以使用boost :: noncopyable.

Alt解决方案:

另一个解决方案是使用void返回类型并使调用者通过引用传递其变量.这样,当您获得对调用者对象的引用时,不会进行任何复制.