4

在 TDPL 7.1.5.1 中讨论了将 Widget w2 分配给 w1 并且作者声明“将 w2 分配给 w1 字段将 w2.array 分配给 w1.array - 数组边界的简单分配,而无需实际复制数组内容。这需要修复,因为我们想要在源 Widget 中创建数组的副本并将该副本分配给目标 Widget。” 从我所见,如果你写了一个 postblit,那么默认的 opAssign 会调用你的 postblit。看来这在书中是不正确的,或者至少是可疑的建议。此外,如果您创建了 postblit,似乎不需要创建 opAssign。这是对问题的正确评估吗?

假设编写更少的代码是好的,那么为结构实现 opAssign 的情况是什么?

4

1 回答 1

4

首先想到的是将一些东西分配给一个不是结构类型的结构(比如double一个Angle结构)

同样,当每个结构都需要唯一的外部资源(纯值语义)时,您可以使用 将opAssign内容直接复制到旧资源中,而不是在析构函数中丢弃然后在 postblit 中重新分配

仅当资源的释放/分配比深层副本昂贵得多时,最后一次使用才有用(TBH,我现在真的想不出)

于 2012-11-27T16:05:03.533 回答