为什么指针成员初始化为非零
why is a pointer member initialized to a non-zero?
我遇到了一件我无法解释的奇怪事情。默认情况下,指针成员不初始化为零(仅在第二次发生(。我知道我忘了在构造函数中初始化它并在 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++的工作方式。它没有初始化为任何东西。通过省略初始化部分,您明确表示不希望对其进行初始化。
如果未显式完成,则内置类型的成员不会为零初始化
相关文章:
- 分段错误 - 读取初始化指针的数组
- 初始化指针的常量向量
- 初始化指针或引用成员变量以指向另一个成员
- C++初始化指针/引用/复制细微差别
- 使用无效指针初始化指针声明符的行为是否未定义?
- 在一行中初始化指针(新uint8_t[高度*宽度*3])
- 如何使用可变模板初始化指针?
- 初始化指针时出现写入访问冲突
- C 错误,带有卷曲括号的字面初始化指针
- 重新初始化指针是一种不好的做法吗?
- 初始化指针?C
- 初始化指针向量的向量
- 如何在类函数中正确初始化指针
- C++初始化指针会使应用程序随机崩溃
- 初始化指针结构 - 内存中的外观
- 如何使用struct构造函数在结构中初始化指针阵列
- 在一行中声明并初始化指针到类实例
- 分配数组与初始化指针
- QT 中的非初始化指针
- 使用地址值初始化指针