加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读