gpt4 book ai didi

C++ 复制构造函数和赋值

转载 作者:太空狗 更新时间:2023-10-29 21:05:50 24 4
gpt4 key购买 nike

如果提供复制构造函数,我已经多次在脑海中反复思考,还必须提供赋值运算符。但是,有时类可以使用复制构造函数但不能使用赋值运算符。

例如:

class A {
public:
const int myVar;

A(const int var) : myVar(var) {};
A(const A& other) : myVar(other.myVar) {};
};

那么这是一件可怕的事情吗?赋值运算符是否需要定义但设为私有(private)?这样的类仍然是可复制构造的吗?

最佳答案

那么这是一件可怕的事情吗?
不,不是。
并非所有类都需要可复制构造和可分配。具有可复制构造但不可分配的类是完全有效的。

这样的类还可以复制构造吗?
是的。
只要您的类提供了一个public 复制构造函数,您的类就是可复制构造的。

是否需要定义赋值运算符并将其设为私有(private)?
这取决于您的使用情况。
如果您的类需要可赋值,那么它最好不要有 const 成员。

如果您的类具有 const 成员,则默认编译器生成的复制赋值运算符将不起作用,因为它会尝试分配给不允许的 const 成员。因此,如果您的代码需要复制赋值运算符,您将必须提供自己的重载版本。但是,无论如何,这个重载版本无法提供预期的赋值语义。

如果你的类对象不需要是 Assignable 那么就不要定义它。如果您的代码不小心使用了它,编译器无论如何都会生成错误。

关于C++ 复制构造函数和赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8899976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com