【发布时间】:2013-05-18 13:52:12
【问题描述】:
我有一个插件架构,我在其中调用动态库中的函数,它们返回给我一个 char* 这是答案,它会在稍后阶段使用。
这是插件函数的签名:
char* execute(ALLOCATION_BEHAVIOR* free_returned_value, unsigned int* length);
其中ALLOCATION_BEHAVIOR 必须是:DO_NOT_FREE_ME、FREE_ME、DELETE_ME 插件(在库中)告诉我插件如何分配它刚刚返回的字符串:DO_NOT_FREE_ME 告诉我,这是我不应该接触的变量(例如永远不会改变的const static char*)FREE_ME 告诉我应该使用free() 来释放返回的值,DELETE_ME 告诉我使用delete[] 来获取消除内存泄漏。
显然,我不信任插件,所以我希望能够检查他是否告诉我 free() 变量,确实它是可以真正释放的东西......这可能使用当今 Linux/Windows 上的 C/C++ 技术?
【问题讨论】:
-
在一个正常设计的软件中,资源管理并不像你解释的那样。应该明确谁以及何时释放资源。
-
如果您不信任插件,请不要加载它们。
-
@fritzone 没有。显然,插件作者没有告诉你任何事情。这似乎是你的问题。如果他们确实告诉了你一些事情,你就不必自己弄清楚了。你的要求是矛盾的:你希望插件编写者给你这个信息,一旦你得到它,你想丢弃它并自己发现它。下定决心,你的问题就会迎刃而解。
-
我讨厌这样的设计。我更喜欢不透明/半透明的库/插件返回一个带有虚拟“释放()”方法的对象,以便插件在不再需要时处理删除/重新池/任何数据。插件中的代码可以随心所欲地覆盖“release()”。
-
另外...插件如何在“堆栈上”分配一些东西并返回一个有效的指针?你支持book thievery插件吗?