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;
}
};