这安全吗?我在实际实现中没有使用任何虚拟函数,但我很想相信即使我使用了,它仍然是安全的。
class Foo
{
Foo()
{
// initialize things
}
Foo( int )
{
new ( this ) Foo();
}
}
当您输入左大括号时Foo(int)
构造函数,所有类成员都调用了它们的构造函数。如果您随后使用 new 位置强制调用另一个构造函数,则会覆盖该类的当前状态。这基本上意味着所有成员的构造函数都会被调用两次 - 如果有的话new
在它的构造函数中,你泄漏了该内容,你真的会把事情搞砸!您正在有效地构造两个对象,以及第一个对象的成员的析构函数永远不会被调用,因为第二个对象覆盖了第一个对象的内存。
换句话说就是BAD!不要这样做!
最常见的解决方法是使用某种初始化函数,并从两个构造函数中调用它。不过,这不会让您初始化 const 成员和其他必须位于初始值设定项列表中的成员。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)