Jon*_*ney 11 c++ placement-new
这样安全吗?我在实际实现中没有使用任何虚函数,但我很想相信即使我是,它仍然是安全的.
class Foo
{
Foo()
{
// initialize things
}
Foo( int )
{
new ( this ) Foo();
}
}
Run Code Online (Sandbox Code Playgroud)
Ash*_*ain 13
当你输入Foo(int)构造函数的开放花括号时,所有类成员都调用了它们的构造函数.如果然后强制调用另一个带有placement new的构造函数,那么你将覆盖该类的当前状态.这基本上意味着所有成员都有两次调用它们的构造函数 - 如果new它的构造函数中存在某些东西,那么你会泄漏那些内容,而你真的会把事情弄得一团糟! 您正在有效地构造两个对象,并且永远不会调用第一个对象的成员的析构函数,因为第二个对象会覆盖第一个对象的内存.
换句话说,它很糟糕!不要这样做!!
最常见的解决方法是使用某种初始化函数,并从两个构造函数中调用它.但是,这不会让您初始化const成员和必须位于初始化列表中的其他成员.
| 归档时间: |
|
| 查看次数: |
1009 次 |
| 最近记录: |