有没有办法让我的自定义类只能通过引用传递?C++类只能通过引用传递
基本上,我有以下类:
class A{
private:
int _x;
public:
A(int y){
_x = y;
}
};
我能让它的地方,我只能通过引用传递吗?否则它会引发编译时错误?
有没有办法让我的自定义类只能通过引用传递?C++类只能通过引用传递
基本上,我有以下类:
class A{
private:
int _x;
public:
A(int y){
_x = y;
}
};
我能让它的地方,我只能通过引用传递吗?否则它会引发编译时错误?
有几个人建议使复制构造函数为私有。这是一个主要是很好的解决方案,但它不完整。它仍然允许类型本身无意中通过价值传递自己。更彻底的解决方案是将复制构造函数声明为私有,然后再不实现它。
class A{
private:
// Prevent value copying
A(const A&);
int _x;
public:
A(int y){
_x = y;
}
};
注:由于@DeadMG指出,在C++ 11使用delete
是优选的。
A(const A&) = delete;
我从来没有建议*实现复制构造函数。 – Puppy 2012-03-10 00:36:47
您可以通过将复制构造函数声明为私有(或在C++ 11中删除)来防止复制。
或者在pre-C++ 11中继承'boost :: noncopyable'。 – 2012-03-09 21:02:17
是声明拷贝构造函数私有的(但仍实现它)允许友元函数或友元类仍然使用私有函数/类的成员,因此,拷贝构造函数仍然可以访问。这就是为什么你声明它是私人的,不执行它。
+1提友。 – innochenti 2012-03-09 21:35:08
是的,使其复制构造函数是私人的。 – 2012-03-09 20:41:38