D语言中结构和类之间的使用偏好

Fre*_*red 28 d

我应该何时将类型定义为结构或类?

我知道struct是值类型,而类是引用类型.所以我想知道,例如,我应该将堆栈定义为结构还是类?

Jon*_*vis 35

选择struct vs class的原因#1:类有继承,结构没有.如果需要多态性,则必须使用类.

原因#2:结构通常是值类型(尽管如果你在它上面工作,你可以使它们成为引用类型).类始终是引用类型.因此,如果您需要值类型,请选择结构.如果你想要一个引用类型,最容易上课.

原因#3:如果你有一个包含大量数据成员的类型,那么你可能想要一个引用类型(以避免昂贵的复制),在这种情况下,你可能会选择一个类.

原因#4:如果你想要确定性地破坏你的类型,那么它将需要成为堆栈上的结构.GC堆上的任何内容都没有确定性破坏,并且GC堆上的东西的破坏者/终结器可能永远不会运行.如果他们被GC收集,那么他们的终结者将被运行,否则,他们将不会.因此,如果您希望在离开作用域时自动销毁类型,则需要使用结构并将其放在堆栈中.

至于你的特殊情况,容器通常应该是引用类型(每次传递它们时复制它们的所有元素都会非常昂贵),并且a Stack是一个容器,所以你将要使用一个类,除非你想要把它变成一个重新计算的结构,这显然是更多的工作.它的优点是可以保证析构函数在不再使用时运行.

在旁注中,如果你创建一个类是一个容器,你可能想要使它成为最终的,以便可以内联它的各种函数(如果该类不是从任何东西派生的,那么它将不是虚函数除了Object并且它们不是具有的功能Object,这对于像容器这样的性能非常重要的东西来说非常重要.


dir*_*tly 5

"D"进入D编程语言

在D你得到结构,然后你得到课程.它们共享许多设施,但有不同的章程:结构是值类型,而类是动态多态,只能通过引用访问.那种混乱,切片相关的错误,以及评论等等!不要继承!不存在.设计类型时,您需要预先确定它是单形值还是多态引用.C++着名地允许定义模糊性别类型,但它们的使用很少,容易出错,并且令人反感,足以保证简单地通过设计来避免它们.

对于您的Stack类型,您可能最好定义interface第一个然后实现它(使用class),这样您就不会将Stack类型的特定实现与其接口绑定.