1
6
是单独传递数据还是按结构传递数据是一个样式问题,需要根据具体情况来决定。 重要的问题是:对象在构造后是否准备好并可用,编译器是否强制您将所有必需的数据传递给构造函数,或者您是否必须记住在构造后调用一组setter,这些setter的数目可能随时增加,而编译器没有给您任何提示,您需要调整代码。所以不管这是不是
或
没那么重要。(有许多参数,每个人都喜欢前者,但这是哪个数字——以及这样的类是否设计得很好——是有争议的。)然而,我是否可以使用这样的对象
或者必须这样做
在我使用这个物体之前,
做
做一个巨大的改变。尤其是,当有人来添加另一个数据字段到
|
2
4
使用此方法可以简化二进制兼容性。
当库版本更改时,如果配置
此外,还保留了已损坏的构造函数名称,如果更改了其签名,该名称将发生更改。这也允许我们保持二进制兼容性。 例子:
|
3
2
其主要优点是对象可以是不可变的。我不知道实际的配置结构是否比构造函数的A和B参数有任何好处。 |
4
1
使用此方法会使二进制兼容更加困难。 如果结构已更改(添加了一个新的可选字段),则使用该类的所有代码都可能需要重新编译。如果添加了一个新的非虚拟setter函数,则不需要重新编译。 |
5
0
我支持这里降低的二进制兼容性。 我看到的问题来自对结构字段的直接访问。
因为我修改了
对象的物理布局可能发生了更改,但getter没有更改,函数的偏移量也没有更改。 当然,对于二进制兼容性,应该检查 PIMPL 成语。
当您最终编写更多的代码时,只要在现有的方法之后添加补充方法,就可以保证对象的向后兼容性。 实例在内存中的表示不取决于方法的数量,它只取决于:
它是可见的(而不是可访问的)。
在这里,我们保证在属性上不会有任何变化。定义
更多的代码意味着:构造器、复制构造器、赋值操作符和析构函数,这是相当数量的,当然还有getter和setter。还要注意,这些方法不能再内联,因为它们的实现是在源文件中定义的。 不管它是否适合你,你自己决定。 |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |