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

对于D结构,opAssign是必要的/有用的,如果是,何时,d,D,在TDPL 7.1.5.1中,讨论了小部件w2被分配给w1,作者声明“逐字段将w2分配给w1将w2.array分配给w1.array—一种简单的数组边界分配,无需实际复制数组内容。这需要修复,因为我们想要的是在源小部件中创建数组的副本,并将该副本分配给目标小部件。“据我所见,如果您编写了postblit,那么默认的opAssign将调用您的postblit。那么,书中的这一点似乎是不正确的,或者至少是可疑的建议。此外,如果您已经创建了postblit,则似乎没有必要创建opAssign。这是对问

在TDPL 7.1.5.1中,讨论了小部件w2被分配给w1,作者声明“逐字段将w2分配给w1将w2.array分配给w1.array—一种简单的数组边界分配,无需实际复制数组内容。这需要修复,因为我们想要的是在源小部件中创建数组的副本,并将该副本分配给目标小部件。“据我所见,如果您编写了postblit,那么默认的opAssign将调用您的postblit。那么,书中的这一点似乎是不正确的,或者至少是可疑的建议。此外,如果您已经创建了postblit,则似乎没有必要创建opAssign。这是对问题的正确评估吗


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

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

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


最后一次使用只有在资源的释放/分配比深度复制昂贵得多的情况下才有用(TBH我现在真的想不出一个)

这听起来像是确认了一般情况下您不想要一个。当您需要时,不同类型的转换就是一个很好的例子。老实说,我没有遵循解释中的外部资源部分。如果您想要值语义,并且有外部资源(比如文件句柄),那么您不想要一个postblit,让目标实例对同一个文件拥有自己独特的句柄,以便复制构造可以使用这些值语义吗。即使在这种情况下,您也不需要opAssign,因为编写postblit是为了提供真正的深度复制(值语义)。