0

私は次の戦略を実装することを考えています:

クラスメソッドで例外を処理する場合、std::bad_alloc例外を再スローする前に、可能な限り/意味のある場合はいつでもメモリを解放しようとします。したがって、オブジェクトに解放可能なstdコンテナ(std :: vector <>)がある場合、次のようになります。

catch( std::bad_alloc& e ) {
  //free any memory in my std::vector member, how? by doing this dirty hack
  ~myVec();
  new ( &myVec) std::vector<myType>();
  throw; //rethrow exception
} 

質問:上記の「ダーティハック」は、例外が展開されている間にメモリの割り当てを解除するための安全な戦略ですか?長所と短所は何ですか?

4

1 に答える 1

3

そのようなことをする必要はありません-ベクトルは自動的に破壊されます。それがRAIIの仕組みです。他の状況でベクトルをクリアしたい場合でも、clear()メソッドが付属しています。または、あなたはただすることができますvec = std::vector<T>();

于 2012-04-21T16:59:08.193 に答える