c++ - 构造函数中的非零默认值

标签 c++ constructor defaults

<分区>

Possible Duplicate:
Undefined / Uninitialized default values in a class

我在 C++ 中有一个创建和销毁相当频繁的类。为了调试,我在类中添加了一个 bool mDebug,我想用 #ifdef 打开它。但是,我发现即使未定义 ifdef 也会出现与调试变量关联的消息。当我将值转储到构造函数中时,我发现它具有随机值 - 35、68 等。因此我假设存在某种内存泄漏,并且正在为该类分配已在使用的内存。但是,我已经对其运行了 purify,并且它没有显示此时未初始化的内存读取或任何越界写入。 valgrind 也没有太大帮助。由于各种原因,gdb 在这段代码上的表现不是很好。我可以转储变量的地址,但还有其他想法吗?

谢谢

最佳答案

我假设您添加到类中的“bool mDebug不是静态成员,因为它会(自动)初始化为零。所以,我假设它一定是一个“常规”数据成员。

这意味着您根本没有使用“基本/成员初始化列表”或在构造函数主体中显式设置其初始值(您也可以将它们包装在 #ifdef 中,因为您成员定义包含在 #ifdef 中。

默认情况下,成员不会设置为零(您必须明确地这样做)。除非发生了非常奇怪的事情,否则我怀疑这是内存泄漏/错误。

关于c++ - 构造函数中的非零默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6142006/

相关文章:

c++ - 构造一个 constexpr std::weak_ptr

C++ - 在派生类中静态初始化基类保护的成员变量

c++ - 将函数用作非类型模板参数时出错

Typescript - 从抽象构造函数调用抽象方法或提供等效功能

c++ - 通过使用显式构造函数将相同的参数传递给每个元素来构造元组

javascript - 为 jQuery 插件的每个实例设置默认设置的正确方法

git - 为什么 git core.preloadindex 默认值是 false?

forms - cakePHP 表单输入标签覆盖 inputDefaults

c++ - 关于函数模板的相同代码块在 g++ 下编译正常,但在 VC6 下编译错误,为什么?

c++ - 来自 boost 程序选项的 bool 选项