我写了一个应用程序,它允许人们贡献的插件来扩展功能。 这些插件将部署为DLL文件,运行时其框架回升。 每个插件设有其被应用来创建对象的寿命期间被多次调用一个工厂函数。 到目前为止,为了处理这些对象的所有权问题,我用一个简单的计数共享指针在返回的对象,以便每当最后一个引用被移除它们被破坏。
然而,这往往会引发在Windows崩溃,因为它不是不可能发生的对象是在插件DLL new'ed但后来(由于在共享指针DEREF()调用)删除在主应用程序 - 并且这AFAIK的malloc /免费查询股价是一个没有没有在Windows上。
我目前的解决办法是让DEREF()不叫“删除;” 直接而是一个“释放();” 功能必须由插件和调用来实现“删除;”。 然而,这是相当烦人,每个插件必须实现这个小功能 - 我工作围绕这个迄今通过提供一个方便的宏插件作者必须使用。 没有任何人有替代的想法也许?
到目前为止,我的做法是,贡献的插件的所有对象的插件分配,并同时发布还有 - 当然,另一种可能是,让通过提供一个指向一个malloc样功能的所有存储在主应用程序分配(该插件其根据需要),并公布有作为,他们就可以调用。 这样做的问题是,它不是插件的作者一样方便,我想。
我很想对这个问题的任何其他观点。
更新:我刚刚意识到,我可以重新实现运营商新的和operator delete由插件返回的对象的基类,让他们new'ing并执行删除操作他们总是会导致函数调用到同一模块(所以,要么所有的分配和免费的都在插件中,或者在框架)来完成。