有没有办法让我的自定义类只能通过引用传递?
基本上,我有以下课程:
class A{
private:
int _x;
public:
A(int y){
_x = y;
}
};
我可以把它带到我只能通过引用传递的地方吗?否则会抛出编译时错误?
答案 0 :(得分:10)
您可以通过将复制构造函数声明为私有(或在C ++ 11中删除)来阻止复制。
答案 1 :(得分:3)
有些人建议将复制构造函数设为私有。这是 这个问题的良好解决方案,但它并不完整。它仍然允许类型本身意外地通过值传递自己。更彻底的解决方案是将复制构造函数声明为private,然后再实现它。
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;
答案 2 :(得分:2)
是声明复制构造函数私有(但仍在实现它)允许友元函数或朋友类仍然使用类的私有函数/成员,因此,仍然可以访问复制构造函数。这就是为什么你把它声明为私有而不实现它。