应该在构造函数中执行可能需要一些时间的操作,还是应该构造对象然后稍后进行初始化.
例如,当构造表示目录结构的对象时,应该在构造函数中完成对象及其子对象的填充.显然,目录可以包含目录,而目录又可以包含目录等.
这个优雅的解决方案是什么?
我有一堂课,代表一组数字。构造函数有三个参数:startValue,endValue和stepSize。该类负责保存一个列表,其中包含在开始值和结束值之间的所有值,并考虑了stepSize。
示例:startValue:3,endValue:1,stepSize = -1,Collection = {3,2,1}
我目前正在创建该集合以及一些有关构造函数中对象的信息字符串。公共成员是只读信息字符串和集合。
我的构造函数此刻正在做三件事:
检查参数;这可能会引发构造函数异常
将值填充到集合中
生成信息字符串
我可以看到我的构造函数确实在工作,但是如何解决这个问题,或者应该解决这个问题呢?如果我将“方法”从构造函数中移出,则就像具有init函数,并给我留下了一个未完全初始化的对象。我的物体的存在是否值得怀疑?还是在构造函数中完成一些工作不是很糟糕,因为仍然可以测试构造函数,因为没有创建对象引用。
对我来说,这看起来不对,但似乎我找不到解决方案。我也考虑了一个构建器,但是我不确定这是否正确,因为您不能在不同类型的创作之间进行选择。但是,单个单元测试的责任较小。
我正在用C#编写代码,但是我希望有一个通用的解决方案,这就是为什么文本不包含任何代码的原因。
编辑:感谢您编辑我的拙劣文字(:我改回了标题,因为它代表了我的意见,而编辑后的标题却没有。我不是在问真实的作品是否有缺陷。对我来说,是。这个参考。
http://misko.hevery.com/code-reviewers-guide/flaw-constructor-does-real-work/
该博客很好地说明了这些问题。我仍然找不到解决方案。
我想创建一个线程池.我有一个名为ServerThread.cpp的类,其构造函数应该执行以下操作:
ServerThread::ServerThread()
{
for( int i=0 ; i<init_thr_num ; i++ )
{
//create a pool of threads
//suspend them, they will wake up when requests arrive for them to process
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道在构造函数中创建pthreads是否会导致任何应该避免进入的未定义行为.
谢谢
我在互联网上看到了一些在WM_CREATE下创建按钮的例子,我做了一些项目,其中创建"一些"按钮,如开始/停止按钮或文本字段必须在MainWindow下创建,而不是在WM_CREATE下创建.
当我们可以在这两者之间做出选择时,是否有任何理由选择一个人而不是其他人?
constructor ×3
c++ ×2
oop ×2
pthreads ×1
threadpool ×1
unit-testing ×1
win32gui ×1
winapi ×1
window ×1