构造函数中的非零默认值
Non-zero default value in constructor
可能重复:
类中未定义/未初始化的默认值
我在C++中有一个类,它经常被创建和销毁。为了调试,我在类中添加了一个bool mDebug,我想用#ifdef打开它。然而,我发现即使没有定义ifdef,也会出现与调试变量相关的消息。当我在构造函数中转储该值时,我发现它有随机值-35、68等。所以我假设存在某种内存泄漏,并且该类被分配了已经在使用的内存。然而,我已经对它运行了purify,它没有显示当时未初始化的内存读取或任何超出范围的写入。valgrind也没有太大帮助。由于各种原因,gdb在这段代码上不能很好地工作。我可以转储变量的地址,但还有其他想法吗?
感谢
我假设添加到类中的"bool mDebug
"是而不是静态成员,因为它将(自动)初始化为零。因此,我认为它必须是一个"常规"数据成员。
这意味着您根本没有用"基/成员初始值设定项列表"或在构造函数体中显式地设置其初始值(由于您的成员定义封装在#ifdef
中,因此您也可以将这两个列表中的任何一个封装在#ifdef
中)。
默认情况下,成员不会设置为零(必须明确设置)。除非真的发生了什么奇怪的事情,否则我怀疑这是内存泄漏/错误。
相关文章:
- 使用基类指针调用基类的值构造函数的语法是什么?
- 当有右值构造函数可用时,为什么从右值调用类引用构造函数重载?
- 为什么 std::move 不将默认移动构造函数中的源变量更改为默认值?
- 调用值构造函数而不是复制构造函数
- 通过默认复制构造函数比较 C++ 字符串是否会影响性能,原因为何?
- 复制和赋值构造函数的问题
- 在创建对象向量时,不为每个对象唯一调用默认对象构造函数
- C++默认复制构造函数不可行
- 没有数据成员和大括号语法的类的默认复制构造函数
- 具有unique_ptr和线程的默认矢量构造函数
- 显式默认析构函数禁用类中的默认移动构造函数
- 为什么默认的构造函数在这里不是 constexpr
- 编译器是否优化了默认移动构造函数?
- C++ 继承基构造函数,但仍调用默认派生构造函数
- 未调用右值构造函数
- 删除默认类构造函数有什么意义?
- CRTP 和复制/移动赋值/构造函数继承
- 默认情况下是默认的构造函数/赋值noexcept/constexpr
- 使用模板化构造函数时禁用默认复制构造和赋值构造函数
- 默认移动构造函数、默认复制构造函数和默认赋值操作符