c ++类只能通过引用传递

时间:2012-03-09 20:39:16

标签: c++ pass-by-reference

有没有办法让我的自定义类只能通过引用传递?

基本上,我有以下课程:

class A{
private:
  int _x;
public:
  A(int y){
    _x = y;
  }
};

我可以把它带到我只能通过引用传递的地方吗?否则会抛出编译时错误?

3 个答案:

答案 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)

是声明复制构造函数私有(但仍在实现它)允许友元函数或朋友类仍然使用类的私有函数/成员,因此,仍然可以访问复制构造函数。这就是为什么你把它声明为私有而不实现它。