我有一堆遵循简单模式的代码:

Thing *myThing = newThing(); // allocation happens here
...
thingFuncA(myThing);
... and other computations ...
thingFuncB(myThing);
...
thingFree(myThing);
return result;


thingFuncX()的应用程序与其他计算一样,但最终总是释放的模式始终相同。

我需要在这里使用原始C(现在,不是花哨的范围分配的C ++),我在半受限处理器上运行裸机。

有没有一种方法(ab)使用CPreprocessor来捕获此公共模式。我想使用一个惯用语,以便让我有信心不会忘记免费。我想我可以用宏和while { } do ()做一些事情(在这种情况下,作为示例的答案会有所帮助)。也许还有其他我忽略的聪明C技巧?

最佳答案

GCC提供了cleanup属性,该属性本质上允许您在C中具有基于范围的析构函数:

void function(void) {
    Thing *myThing __attribute__((cleanup(callback))) = newThing();
    ...
    thingFuncA(myThing);
    thingFuncB(myThing);
}

void callback(Thing **thing) {
    thingFree(*thing);
}

关于c - C模式/惯用语,用于平衡分配/释放,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28308157/

10-11 03:58