C++ 为什么类成员变量定义的顺序很重要?

C++ 为什么类成员变量定义的顺序很重要?,c++,C++,我的代码运行了很长时间,最近,我修改了这个类中的成员变量顺序 我发现它在我的电脑里崩溃了 这是我代码的一部分:(对不起,我不能把所有代码都粘贴在这里,它太大了,会很混乱) 头文件 #pragma once #include <unordered_map> #include <vector> #include <libconfig.h++> #include "struct/struct_util.hpp" #include "i

我的代码运行了很长时间,最近,我修改了这个类中的成员变量顺序

我发现它在我的电脑里崩溃了

这是我代码的一部分:(对不起,我不能把所有代码都粘贴在这里,它太大了,会很混乱)

头文件

#pragma once
#include <unordered_map>
#include <vector>
#include <libconfig.h++>

#include "struct/struct_util.hpp"
#include "infra/ipc_util.hpp"
#include "util/order_manager.h"
#include "util/universe.h"

namespace V1 {
  namespace base {
    class BaseAlpha {
     public:
      BaseAlpha(const libconfig::Config& cfg, const std::string& id);
      BaseAlpha(const BaseAlpha&) = delete;
      BaseAlpha& operator=(const BaseAlpha&) = delete;
      virtual ~BaseAlpha();
    
     protected:
      util::trade_util::OrderManager *om_;
      util::trade_util::UM& u_; 
      const libconfig::Config& cfg_;
      bool is_live_;  // !!!!!!please notice here, if i move is_live_ forward to om_, it will be crashed
     private:
      virtual void finalize(int32_t date);
    };  
  }
};

为什么可变顺序的顺序会使它崩溃?您能帮忙吗?

因为初始化顺序是由该顺序定义的,而不是由构造函数中初始值设定项列表中的顺序定义的。如果您认为重复项不适用,请更具体一些,并显示最小可复制的示例。
#include "./base_alpha.h"

V1::base::BaseAlpha::BaseAlpha(const libconfig::Config& cfg, const std::string& id) 
  : om_(new util::trade_util::OrderManager(id, cfg.exists("is_live") ? bool(cfg.lookup("is_live")) : true)),
    u_(util::trade_util::UM::Inst()),
    cfg_(cfg) {
  // is_live_ = cfg_.exists("is_live") ? bool(cfg_.lookup("is_live")) : true;
}