对于D结构,opAssign是必要的/有用的,如果是的话

时间:2012-11-27 15:24:48

标签: d

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

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

1 个答案:

答案 0 :(得分:4)

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

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

这最后一次使用仅在资源的重新分配/分配比深拷贝(TBH我现在无法真正想到的那样)贵得多时才有用。