私のコードでは、オブジェクトを動的に割り当てて構築し、ポインタをベクトルにプッシュする必要があります。これらの醜いtry-catchブロックをすべて使用せずに、以下のコードよりもクリーンな方法がありますか?私は非標準ライブラリを使用することはできません。 C++ 11はありません。私は標準C++ 98/03しか持っていません。標準的なC++を使った1つのオブジェクトのきれいな割り振りと構築98/03
void insert() {
//...do something...
MyType* obj = 0;
try {
obj = alloc.allocate(1); // yes, even the allocation must be inside one try-catch in my case, since I need to undo something
alloc.construct(obj, default_obj);
try {
v.push_back(obj);
} catch (...) {
alloc.destroy(obj);
throw;
}
} catch (...) {
//..undo something..
if (obj)
alloc.deallocate(obj, 1);
throw;
}
}
EDIT: アロケーションはどこか新しい/削除生避けるために、引数として渡されたアロケータです。 vはベクトルです。
なぜnewとdeleteを使用しないのでしょうか?alloc.consturctとalloc.deallocとは何ですか? – 111111
allocは、標準インタフェースを持つアロケータです。生の新規作成と削除を避けるために使用されます。 vはstd :: vectorです – Martin
私はあなたのコンテナを作成しています。その場合、アロケータを扱うカスタムRAIIコンテナを作成し、std :: unique_ptrを参照してください。破壊コードのない単一のtryキャッチ – 111111