在 C++ 中,对象的生命周期从构造函数成功完成时开始。在构造函数内部,该对象还不存在。
问:从构造函数发出异常意味着什么?
答:这意味着构造失败,该对象从未存在过,其生命周期从未开始。 [source]
我的问题是:Java 也是如此吗?例如,如果我把手this
到另一个对象,然后我的构造函数失败?
Foo()
{
Bar.remember(this);
throw new IllegalStateException();
}
这是明确定义的吗?做Bar
现在有一个非对象的引用?
该对象存在,但未正确初始化。
这种情况随时可能发生this
构造期间泄漏(不仅仅是抛出异常时)。
这是一个非常有问题的情况,因为一些通常假设的保证在这种情况下并不成立(例如final
字段在施工过程中似乎可能会改变其价值)。
因此你绝对应该避免泄漏this
在构造函数中。
这篇 IBM DeveloperWorks 文章描述构建对象时要采取的预防措施以及这些预防措施背后的原因。虽然本文根据多线程讨论了该主题,但当未知/不受信任的代码引用到时,您可能会在单线程环境中遇到类似的问题this
施工期间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)