3 c++ memory constructor initialization
通过使用以下类在C++中实例化对象,我会得到分段错误或中止,具体取决于声明成员变量的顺序.E. g.在mAnotherCountVar之后输入mMemberVar和mAnotherMemberVar会导致段错误.从这个列表中我从成员变量中删除了一个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)
{
}
Run Code Online (Sandbox Code Playgroud)
类成员由声明它们的顺序初始化.init列表中的顺序无关紧要.在你的情况下,它是这个顺序:mMemberVar - > mAnotherMemberVar - > mIsActive - > mBoolMemberVar - > mAnotherBoolMemberVar - > mCountVar - > mAnotherCountVar;
也许这是"静态初始化顺序惨败"的情况,http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.16,是因为使用静态成员初始化mCountVar和mAnotherCountVar?
您可以在列表中初始化为零,然后在构造函数的主体中进行赋值.