在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 ++中的等效清单?
答案 0 :(得分:2)