阅读C++ 超级常见问题解答。在构造函数部分,我看到了以下语句:
顺便说一句,不要试图通过放置新的来实现这一点。有些人认为他们可以在 Foo::Foo(char) 的主体内说 new(this) Foo(x, int(x)+7) 。然而,那是不好的,不好的,不好的。请不要写信告诉我它似乎适用于您的特定编译器的特定版本;这不好
关键是绝对不可能这样做:
class Foo{
public:
Foo(char x){
new (this) Foo(x, int(x)+7);
}
Foo(char x, int y){
//...
}
};
任何人都可以更详细地解释这个技巧威胁到什么吗?
UPD:我怀疑在这个例子中一切都会好起来的,问题将从继承、动态资源分配等开始。
http://ideone.com/gkgi7S :
结论:
这个例子够吗?
没有继承是可能的 - 本质不会改变:
上帝在地球上的
总督Stroustrup 写道:链接使用示例:
在第一行中,我们分配内存,在第二行中 - 我们在已分配的内存区域上构建一个对象。这个例子是平庸的,但你会抓住本质:我们正在一个预先分配的内存区域上构建一个对象,我们可以确定不会拒绝分配内存 - 毕竟它已经在所需的位置分配了“音量”,可以这么说。一个真实的例子是一些性能很重要的关键部分,没有异常等。
放置运算符,例如:
好吧,请注意 Stroustrup 写的关于在这种情况下释放内存的内容。