c++ - C++中构造函数的初始化顺序

标签 c++ memory constructor initialization

通过使用以下类在 C++ 中实例化一个对象,我得到一个段错误或中止,这取决于声明成员变量的顺序。例如将 mMemberVar 和 mAnotherMemberVar 放在 manotherCountVar 之后会导致段错误。从这个 list 中,我从成员变量中删除了一个 std::ofstream,这导致了与其位置无关的段错误。

我认为顺序不是直接的问题,但您认为原因可能是什么?这个类是一个巨大项目的一部分,但是这个类中的这个是第一次出现错误的地方。

class COneClass : public IInterface
{
public:

  COneClass();

  virtual ~COneClass();

  static const unsigned int sStaticVar;
  static const unsigned int sAnotherStaticVar;


private:
  COneClass();
  COneClass(const COneClass& );
  COneClass& operator=(const COneClass& );

  int mMemberVar;
  int mAnotherMemberVar;
  bool mIsActive;
  bool mBoolMemberVar;
  bool mAnotherBoolMemberVar;
  unsigned int mCountVar;
  unsigned int mAnotherCountVar;
};

COneClass::COneClass() :
  mMemberVar(0),
  mAnotherMemberVar(0),
  mIsActive(false), 
  mBoolMemberVar(false),
  mAnotherBoolMemberVar(false),
  mCountVar(sStaticVar),
  mAnotherCountVar(sAnotherStaticVar)
{
}

最佳答案

类成员按照声明的顺序初始化。初始化列表中的顺序无关紧要。在你的情况下是这样的顺序: mMemberVar -> mAnotherMemberVar -> mIsActive -> mBoolMemberVar -> manotherBoolMemberVar -> mCountVar -> manotherCountVar;

关于c++ - C++中构造函数的初始化顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1492199/

相关文章:

c++ - 没有默认构造函数的奇怪的 c++ 复制构造函数

c++ - 为什么我不能从 const String& 方法返回 NULL?

c++ - 无法使用 Gradle 在同一源文件中链接 C++ 方法

Python:每个对象类型(或源代码行)的内存使用统计

php - 为什么这个简单的 php 脚本会泄漏内存?

c# - 如何使属性设置一次且不能更改?

Javascript function() 文字重载

c++ - 如何将 QQuickitem 与 Qml 对象连接?

memory - 一个简单的 Go 程序的高内存使用率

C++ 构造函数委托(delegate),但如何(某种程度上)反转?