C ++为什么我会为成员获得意外的零初始化?

时间:2017-09-09 10:57:45

标签: c++ memory initialization new-operator

阅读how new works in C++我尝试了以下代码:

#include <iostream>

using namespace std;
struct A { int m; }; // POD
int main()
{
    A* a = new A;
    cout<<"A m="<<a->m<<endl;
    return 0;
}

输出始终为“A m = 0”。 为什么不显示剩余价值,我该怎么做呢?

其他信息:在Ubuntu 16.04上使用5.4.0 20160609。试图使用-std = C ++ 03,98和11标准进行编译

1 个答案:

答案 0 :(得分:3)

m的值未指定,可能是13370,就像您的情况一样。这并不意味着0不是剩余价值(它与任何其他数字一样残留),你永远不应该依赖于此。

在实践中可能发生的事情是你在调试中进行编译,编译器在给你之前将所请求的字节清零。