如何在C ++中模仿Java的类归零?

时间:2014-04-23 05:14:01

标签: c++

在C中,为了确保所有结构都归零,我用malloc包裹:

void* safe_malloc(size_t size){
    void *result = malloc(size);
    memset(result, 0, size); //NULL check ommitted for brevity
    return result;
}

这样我就可以避免这样做:

struct Foo {
    int bar;
    int bat;
};

struct Foo *tmp = malloc(sizeof(struct Foo));
tmp->bar = 0; 
tmp->bat = 0; // I want to avoid this laundry list of initializers

我想为C ++做类似的事情,我想要将类的所有成员初始化为零,就像在Java中自动完成的那样。使用像C解决方案这样的解决方案会产生两个问题:1。您无法清除vtable ptr和2.子类将清除继承的成员值。

class Foo {
public:
    int bar;
    int bat;

    Foo(int bar){
        this->bar = bar;
        this->bat = 0; // I dont want to explicitly have to initialize this here
    }
}

class Baz : public Foo {
public:
    int bam;
    Baz(int bar, int bam) : Foo(bar) {
        this->bam = bam;
    }
}

如何避免使用C ++中的等效清单?

1 个答案:

答案 0 :(得分:2)

  1. 首选calloc over malloc + memset
  2. 要将对象归零,请明智地选择构造函数。
  3. 您可以重载新运算符以返回归零内存。 (根据您的要求为类重载或全局重载)这个重载的新应该将分配的字节归零。