id
является декларацией C. Вы можете просто добавить пулы автоматического освобождения на основе области действия в свою программу cpp следующим образом:
autorelease_pool.hpp
class t_autorelease_pool {
public:
t_autorelease_pool();
~t_autorelease_pool();
private:
id d_pool; // << you may opt to preprocess this out on other platforms.
private:
t_autorelease_pool(const t_autorelease_pool&);
t_autorelease_pool& operator=(const t_autorelease_pool&);
};
autorelease_pool.mm
t_autorelease_pool::t_autorelease_pool() : d_pool([NSAutoreleasePool new]) {}
t_autorelease_pool::~t_autorelease_pool() { [this->d_pool drain]; }
В программе cpp:
void UpdateUI() {
t_autorelease_pool pool;
// your/their autoreleasing code here
}
Альтернативой (которую очень легко использовать неправильно) является непосредственное использование среды выполнения ObjC, которая будет выглядеть как следующая C-программа:
#include <objc/runtime.h>
#include <objc/message.h>
...
id pool = objc_msgSend(objc_getClass("NSAutoreleasePool"), sel_getUid("new"));
/* do stuff */
objc_msgSend(pool, sel_getUid("drain"));