使用new运算符有什么问题?

时间:2009-08-03 03:02:23

标签: c++

这是允许的吗?

Object::Object()
{
    new (this) Object(0, NULL);
}

3 个答案:

答案 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)

如果ObjectPOD类型,您可以通过以下方式对其进行初始化:

class Object
{
  int x;
  int y;
  // ...
public:
  Object() { memset( this, 0, sizeof Object ); }
};