gpt4 book ai didi

c++ - 与硬件接口(interface)的 C++ 构造函数应该真正起作用吗?

转载 作者:IT老高 更新时间:2023-10-28 12:44:22 27 4
gpt4 key购买 nike

Possible Duplicate:
How much work should be done in a constructor?

我正在为一些我脑海中的建议而苦苦挣扎,但我不记得其中的原因。

我似乎记得在某些时候读过一些建议(不记得出处),C++ 构造函数不应该做真正的工作。相反,它们应该只初始化变量。建议继续解释说,实际工作应该在某种 init() 方法中完成,在创建实例后单独调用。

情况是我有一个代表硬件设备的类。构造函数调用查询设备的例程以构建描述设备的实例变量对我来说是合乎逻辑的。换句话说,一旦 new 实例化了对象,开发者就会收到一个可以使用的对象,不需要单独调用 object->init()。

构造函数不应该做真正的工作有充分的理由吗?显然它可能会减慢分配时间,但如果在分配后立即调用单独的方法,那也没有什么不同。

只是想弄清楚我目前没有考虑的可能会导致此类建议的问题。

最佳答案

我记得 Scott Meyers 在更有效的 C++ 中建议不要使用多余的默认构造函数。在那篇文章中,他还谈到了使用像 Init() 这样的方法来“创建”对象。基本上,您已经引入了一个额外的步骤,将责任放在类(class)的客户身上。此外,如果你想创建一个所述对象的数组,每个对象都必须手动调用 Init()。您可以有一个 Init 函数,构造函数可以在内部调用该函数以保持代码整洁,或者如果您实现了 Reset(),则对象可以调用,但根据经验,最好删除一个对象并重新创建它,而不是尝试重置它的值是默认值,除非对象被实时创建和销毁多次(例如,粒子效果)。

另外,请注意,构造函数可以执行普通函数无法执行的初始化列表。

警告不要使用构造函数进行大量资源分配的一个原因是,很难在构造函数中捕获异常。但是,有一些方法可以解决它。否则,我认为构造函数应该做他们应该做的事情——为对象的初始执行状态准备一个对象(对于对象创建来说重要的是资源分配)。

关于c++ - 与硬件接口(interface)的 C++ 构造函数应该真正起作用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2399619/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com