这是允许的吗?
Object::Object()
{
new (this) Object(0, NULL);
}
答案 0 :(得分:9)
使用new(this)
将重构成员变量。这可能导致未定义的行为,因为它们不会首先被破坏。通常的模式是使用辅助函数:
class Object {
private:
void init(int, char *);
public:
Object();
Object(int, char *);
};
Object::Object() {
init(0, NULL);
}
Object::Object(int x, char *y) {
init(x, y);
}
void Object::init(int x, char *y) {
/* ... */
}
答案 1 :(得分:2)
我相信你想要委托构造函数,就像Java一样,它们还没有。当C ++ 0x出现时你可以这样做:
Object::Object() : Object(0, NULL)
{
}
答案 2 :(得分:0)
如果Object
是POD类型,您可以通过以下方式对其进行初始化:
class Object
{
int x;
int y;
// ...
public:
Object() { memset( this, 0, sizeof Object ); }
};