void doSomething(void) {
CGImageRef image = CGImageCreate(......);
// do something...
if (some condition...)
CGImageRelease(image);
return;
}
try {
CPlusPlusClass::aFunction()
} catch (...) {
CGImageRelease(image);
return;
}
// use image...
CGImageRelease(image);
}
Objective-C のオブジェクトなら最初に autorelease しておけばいいんですけどね(iOS でなければガベージコレクションも使えるし)。
そんなときは C++ のテンプレートで smart pointer 的なリファレンスのラッパーを書けば、ことあるごとに XXXXRelease(ref) しなくて済みます。
これで、こんなふうに書けるようになります。
#include "AutoRef.h"
void AutoRefRelease(CGImageRef ref) { CGImageRelease(ref); }
void doSomething(void) {
AutoRef image = CGImageCreate(......);
// do something...
if (some condition...)
return;
}
try {
CPlusPlusClass::aFunction()
} catch (...) {
return;
}
// use image...
}
Objective-C のコードで C++ のコード使う場合(Objective-C++)は、拡張子を .mm に変えるを忘れずに。