通过使用以下类在 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/