在C ++中,对象的生命周期从构造函数成功完成时开始。在构造函数内部,该对象尚不存在。
问:从构造函数发出异常是什么意思? 答:这意味着构造已失败,该物体从未存在,其寿命从未开始。[ 来源 ]
问:从构造函数发出异常是什么意思?
答:这意味着构造已失败,该物体从未存在,其寿命从未开始。[ 来源 ]
我的问题是:Java是否同样适用?例如,如果我移交this给另一个对象,然后构造函数失败,会发生什么情况?
this
Foo() { Bar.remember(this); throw new IllegalStateException(); }
这个定义明确吗?Bar现在是否有对非对象的引用?
Bar
该对象存在,但未正确初始化。
每当this构造期间发生泄漏时(不仅是引发异常时),都可能发生这种情况。
这是一个非常成问题的情况,因为在这种情况下某些公认的担保不成立(例如,final在施工期间字段可能会改变其价值)。
final
因此,您绝对应该避免this在构造函数中泄漏。
该IBM developerWorks文章描述了构造对象时要采取的预防措施以及这些预防措施的背后原因。虽然本文从多线程的角度讨论了该主题,但是当this在构建过程中引用未知/不受信任的代码时,在单线程环境中可能会遇到类似的问题。