在TDPL 7.1.5.1中讨论了Widget w2被分配给w1并且作者声明“通过字段将w2分配给w1字段将w2.array分配给w1.array-数组边界的简单分配,而不实际复制数组内容。这需要修复,因为我们想要的是在源Widget中创建数组的副本并将该副本分配给目标Widget。“从我所看到的,如果你写了一个postblit,那么默认的opAssign会调用你的postblit。这似乎在书中是不正确的,或者至少是可疑的建议。此外,似乎您创建了postblit,无需创建opAssign。这是对这个问题的正确评估吗?
假设编写较少的代码是好的,那么为结构体实现opAssign的情况是什么?
答案 0 :(得分:4)
首先想到的是将一些东西分配给一个不是结构类型的结构(比如double
到Angle
结构)
当每个结构都需要唯一的外部资源(纯值语义)时,您可以使用opAssign
将内容直接复制到旧资源中,而不是在析构函数中丢弃,然后重新分配postblit
这最后一次使用仅在资源的重新分配/分配比深拷贝(TBH我现在无法真正想到的那样)贵得多时才有用。