C++ new加、不加括号问题

问一个C++ new加括号和不加括号的问题

现在有一个自定义的类,如下代码:

class A{
public:
    int a;
};

int main(){
    A *a1 = new A;
    A *a2 = new A();
    cout << a1->a<<endl;
    cout <<a2->a<<endl;
    return 0;
}

网上都说第一个输出是随机数,第二个是调用了合成默认构造,所以输出0。但是,实际我机器跑出来,两个都是0。怎么解释?

网上说对于内置类型如int,加括号说明分配内存并初始化为0,不加则只是单独分配内存。这个我验证过了,没有问题。

求指点。。

#笔试题目##C/C++#
全部评论
C++11之后就没区别了,好像一个调用构造函数一个不调用
点赞
送花
回复
分享
发布于 2019-07-27 17:32
对于有构造函数的类,不论有没有括号,都用构造函数进行初始化;如果没有构造函数,则不加括号的new只分配内存空间,不进行内存的初始化,而加了括号的new会在分配内存的同时初始化为0。我用gcc8.1跑出来第一个是随机数,第二个是0。
点赞
送花
回复
分享
发布于 2019-07-27 17:32
网易互娱
校招火热招聘中
官网直投
编译器生成的默认构造函数会使用与变量初始化相同的规则来初始化数据成员
点赞
送花
回复
分享
发布于 2019-07-27 19:52

相关推荐

点赞 7 评论
分享
牛客网
牛客企业服务