c++ - 使用编译器生成的赋值运算符安全吗?

标签 c++ mfc variable-assignment

我正在使用 MFC 中的 CPoint 类。没有明确定义的赋值运算符或复制构造函数(AFAIK)。然而,这有效:

CPoint p1(1, 2), p2;
p2 = p1; // p2 now is equal to p1

我假设这是由于编译器生成的赋值运算符而自动运行的。正确吗?

如果是这样,我可以确信这没有做任何意外的事情吗?在这种情况下,CPoint 非常简单,我认为一切都很好,但总的来说,这让我有点担心。这样做是否更好:

p2.SetPoint(p1.x, p2.x);

-cr

最佳答案

这是安全的 - 如果不打算提供赋值运算符,那么 MFC 设计人员可以确保它不可用(例如,通过将其设为私有(private))。

IIRC 编译器将执行逐个成员的复制,因此对于包含这样的 POD 的类,您不会有问题。如果您有一个分配内存的类而忽略了重写 operator= 和执行深层复制,它可能会变得困惑。

FWIW 我问了一个关于编译器能做什么和不能做什么的问题:

Why don't C++ compilers define operator== and operator!=?

一些答案​​值得阅读。

关于c++ - 使用编译器生成的赋值运算符安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/382272/

相关文章:

javascript - 来自变量 : why must identifier be different? 的 JS 默认参数值

c++ - 损坏的顶点和片段着色器

c# - union 结构 C# - 等效或等于?

android - 如何读取 SD 卡 ID 号?

c++ - 设置 MFC 对话框的位置

c++ - 如何让 List Control 中的单元格有边框?

JavaScript OR (||) 变量赋值说明

将赛车手分成相等团队的算法

c++ - 为什么 std::lock_guard/std::unique_lock 不使用类型删除?

c++ - OpenSSL 在客户端和服务器之间建立连接