假设我有一个 C 程序,它调用一些用 C++ 编写的代码。为了使它更具体一点,这可能类似于以下内容:
// C++:
extern "C" void * pluginFunction(void * input) {
result = (SomeObject *) input;
if (! result)
SomeObject * result = new SomeObject();
// Do something really intelligent here.
return (void*) result;
}
对于调用 C 程序:
int main() {
void * result;
while (something) {
result = pluginFunction(result);
// some more things
}
// Cleanup memory
}
此外,假设 C 程序提供自定义内存管理。因此,C 程序总是知道使用提供的函数 和custom_alloc
分配了哪些内存。custom_free
custom_realloc
在 C++ 端,运算符、new
和已在标准和版本中全局重载。new[]
delete
delete[]
throw ()
现在我的问题:
- 如果 C 部分在调用 期间释放通过自定义函数分配的所有内存
pluginFunction
,它会释放所有实际分配的内存,还是有比 的变体提供的内存更多的东西new
? - 绕过对适当析构函数的调用会造成什么进一步的伤害?是否可以在 C++ 方面完全避免这种伤害,例如在
pluginFunction
? - 您是否看到任何潜在的陷阱或副作用?
请注意,我无法访问调用 C 程序,但必须使用提供的接口。因此,我没有其他选择来安排我的记忆,让它得到适当的释放并希望最好。