首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C++中模拟Java的类归零?

问如何在C++中模拟Java的类归零?
EN

Stack Overflow用户
提问于 2014-04-23 13:14:01
回答 1查看 62关注 0票数 0

在C中,为了确保所有结构都归零,我用以下命令包装malloc:

代码语言:javascript
复制
void* safe_malloc(size_t size){
    void *result = malloc(size);
    memset(result, 0, size); //NULL check ommitted for brevity
    return result;
}

这样我就可以避免做以下事情:

代码语言:javascript
复制
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.一个子类将清除继承的成员值。

代码语言:javascript
复制
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++中出现等同的洗衣单?

EN

回答 1

Stack Overflow用户

发布于 2014-04-23 13:21:50

  1. 首选calloc而不是malloc +memset
  2. 要将对象置零,请明智地选择构造函数。
  3. 您可以重载新运算符以返回归零的内存。(根据您的要求为类或全局重载new )此重载new应将分配的字节清零。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23235271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档