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

C++ c++;类只能通过引用传递,c++,pass-by-reference,C++,Pass By Reference,有没有办法让我的自定义类只通过引用传递 基本上,我有以下课程: class A{ private: int _x; public: A(int y){ _x = y; } }; 我可以通过参考资料将其传递到哪里吗?否则它会抛出编译时错误?您可以通过将复制构造函数声明为私有(或在C++11中删除)来防止复制。您可以通过将复制构造函数声明为私有(或在C++11中删除)来防止复制。一些人建议将复制构造函数设置为私有。这是一个基本上很好的解决问题的方法,但它并不完整。它仍然允许类型

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

基本上,我有以下课程:

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

我可以通过参考资料将其传递到哪里吗?否则它会抛出编译时错误?

您可以通过将复制构造函数声明为私有(或在C++11中删除)来防止复制。

您可以通过将复制构造函数声明为私有(或在C++11中删除)来防止复制。

一些人建议将复制构造函数设置为私有。这是一个基本上很好的解决问题的方法,但它并不完整。它仍然允许类型本身意外地通过值传递自身。更彻底的解决方案是将复制构造函数声明为私有,然后再也不实现它

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;

一些人建议将副本构造函数设置为私有。这是一个基本上很好的解决问题的方法,但它并不完整。它仍然允许类型本身意外地通过值传递自身。更彻底的解决方案是将复制构造函数声明为私有,然后再也不实现它

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;

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

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

是的,将其副本构造函数设置为私有。是的,将其复制构造函数设置为私有。或者在C++11之前的版本中,从
boost::noncopyable
继承。或者在C++11之前的版本中,从
boost::noncopyable
继承。我从未建议实现复制构造函数。我从未建议实现复制构造函数。
class A{
private:
  // Prevent value copying
  A(const A&);

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