在异常期间是否为类中的映射数据成员释放内存

时间:2012-07-04 16:36:26

标签: c++ memory-leaks

typedef struct {
    guint8  mode;     
    vector <string> match_src;  
} structConfig_t;


map < guint64, vector <structConfig_t> > mapConfig_t;

然后按以下课程

class Config {
  private :
     mapConfig_t mapConfig;

  public :
     Config(const char * config_fn) throw (string);
}

构造函数解析“config_fn”中提供的文件中的每一行,并构建mapConfig数据结构。在解析问题上,构造函数引发异常。

很想知道,如果parse在文件中间失败并引发异常并且mapConfig有数据会发生什么 解析到现在为止,mapConfig使用的内存是否会在这种情况下自动放弃?

1 个答案:

答案 0 :(得分:1)

  

如果解析失败[...]并引发异常[...],那么mapConfig使用的内存会在这种情况下自动放弃吗?

是;如果从构造函数体中抛出异常,则将自动销毁所有成员和基类子对象。如果使用new创建对象,则分配的内存也将自动释放。

顺便说一句,抛出string有点不寻常;扔掉std::exception派生的东西更为常见。此外,异常说明符通常被认为是一个坏主意,并且已在最新版本的语言中弃用。