C中构造函数的初始化顺序
发布时间:2020-12-16 10:42:06 所属栏目:百科 来源:网络整理
导读:通过使用以下类在C中实例化对象,我会得到分段错误或中止,具体取决于声明成员变量的顺序. E. g.在mAnotherCountVar之后输入mMemberVar和mAnotherMemberVar会导致段错误.从这个列表中我从成员变量中删除了一个std :: ofstream,这导致了与其位置无关的分段错误.
通过使用以下类在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) { } 解决方法
类成员由声明它们的顺序初始化. init列表中的顺序无关紧要.在你的情况下,这是这个顺序: mMemberVar – > mAnotherMemberVar – > mIsActive – > mBoolMemberVar – > mAnotherBoolMemberVar – > mCountVar – > mAnotherCountVar;
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |