说,我有一个函数,它返回一个引用,我想确保调用者只将它作为引用,不应该作为副本接收它.这在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返回类型并使调用者通过引用传递其变量.这样,当您获得对调用者对象的引用时,不会进行任何复制.