C++复制构造函数和赋值
C++ copy-constructor and assignment
我已经多次在脑海中灌输,如果提供了复制构造函数,就必须提供赋值运算符。但是,有时类可以使用复制构造函数,但不能使用赋值运算符。
例如:
class A {
public:
const int myVar;
A(const int var) : myVar(var) {};
A(const A& other) : myVar(other.myVar) {};
};
那么这是一件可怕的事情吗?是否需要定义赋值运算符,但将其设为私有运算符?这样的类仍然可以复制构造吗?
那么这是一件可怕的事情吗
不,不是
并不是所有的类都需要是可复制的、可构造的和可赋值的。拥有可复制构造但不可赋值的类是完全有效的。
这样的类仍然可以复制构造吗
是的。
只要您的类提供了public
复制构造函数,那么您的类就是可复制构造的。
是否需要定义赋值运算符,但将其设为私有运算符
这取决于你的使用情况
如果您的类需要可赋值,那么理想情况下它不应该有const
成员。
如果类具有const
成员,则默认编译器生成的复制赋值运算符将不起作用,因为它试图赋值给不允许的常量成员。因此,如果您的代码需要一个复制赋值运算符,则必须提供自己的重载版本。但是,无论如何,这个重载版本不能提供预期的赋值语义。
如果你的类对象不需要是可赋值的,那么就不要定义它。如果你的代码不小心使用了它,编译器无论如何都会产生错误。
相关文章:
- 使用基类指针调用基类的值构造函数的语法是什么?
- 当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?
- 调用值构造函数而不是复制构造函数
- 复制和赋值构造函数的问题
- 重载赋值运算符函数和复制构造函数中的错误
- 将函数赋值给函数指针,常量参数正确性
- 未调用右值构造函数
- CRTP 和复制/移动赋值/构造函数继承
- 复制赋值构造函数中的aligned_alloc内存块在释放时崩溃
- 如何使用其定义附近的显式长度/值构造函数初始化向量成员变量
- template_back和move赋值构造函数存在问题
- C++赋值构造函数瓦尔格林德错误
- 数组C++的复制和赋值构造函数示例
- Linux vs Windows std::map 赋值构造函数(为什么会有这样的区别?)
- 'explicit' g ++ 中的关键字对简单构造函数(不是复制/赋值构造函数)没有影响?
- C++赋值构造函数
- 使用模板化构造函数时禁用默认复制构造和赋值构造函数
- 将赋值/构造函数移出继承范围
- 复制和交换技术在赋值操作符函数内部使用复制构造函数
- 调用复制构造函数或赋值构造函数时