2
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 データ構造を構築します。解析の問題で、コンストラクターは例外を発生させます。

知りたいのですが、解析がファイルの途中で失敗し、例外が発生し、mapConfig が解析中のデータを持っている場合、mapConfig によって使用されていたメモリは、そのようなシナリオで自動的に放棄されますか?

4

1 に答える 1

1

解析が失敗し [...] 例外が発生した場合 [...]、それまで mapConfig によって使用されていたメモリは、そのようなシナリオで自動的に放棄されますか?

はい; コンストラクター本体から例外がスローされると、すべてのメンバーと基本クラスのサブオブジェクトが自動的に破棄されます。オブジェクトが を使用して作成されていた場合new、割り当てられたメモリも自動的に解放されます。

ところで、投げるのは少し珍しいstringです。から派生したものをスローする方がはるかに一般的std::exceptionです。また、例外指定子は一般的に悪い考えと見なされており、言語の最新バージョンでは非推奨になっています。

于 2012-07-04T16:44:02.267 に答える