为什么指针成员初始化为非零

why is a pointer member initialized to a non-zero?

本文关键字:初始化 指针 成员 为什么      更新时间:2023-10-16

我遇到了一件我无法解释的奇怪事情。默认情况下,指针成员不初始化为零(仅在第二次发生(。我知道我忘了在构造函数中初始化它并在 d-tor 中释放内存。但我无法解释为什么指针默认情况下不初始化为零。下面是有效的伪代码。我发布它是为了向你们展示我的意思。在我的实际代码中,它要复杂得多。

到目前为止,我的猜测是某处存在内存泄漏。如果有更多的可能性,我想听听你的意见。谢谢。

#include <iostream>
class A {
public:
    int *p;
    A () {std::cout << "p in ctor: " << p << std::endl;}
    ~A() {}
    void f(int *i) { p = i;}
};
int main() {
    A *a = new A();
    int c = 0;
    a->f(&c);
    std::cout << "p in step 1:" << a->p << std::endl;
    delete a;
    A *b = new A();
    std::cout << "p in step 2:" << a->p << std::endl;//here works but not in real code
}

But I cannot explain why the pointer is not initialized to a zero by default. - 这就是C++的工作方式。它没有初始化为任何东西。通过省略初始化部分,您明确表示不希望对其进行初始化。

如果未显式完成,则内置类型的成员不会为零初始化