[伸手党][可能是一个 Class Slicing 问题?] 想知道这样做会不会造成比如内存泄露之类的故障。

2015-01-17 20:33:10 +08:00
 raincious
故事是这样的:

最近在*尝试*看能不能在C++里实现插件机制,方式类似于写一个插件控制类Plugin,然后再写一个PluginBase作为插件的基类。

所有插件都继承这个PluginBase基类,然后覆盖/扩展这个基类来实现自己各自的功能。

Plugin类里有一个vector用来储存所有PluginBase类型的指针(PluginBase*),用来指向各个插件,然后当插件调用的时候只需要Plugin类里直接拿迭代器出来一个个呼叫PluginBase里对应的virtual方法就好了。

代码类似于这样(请脑补Base为PluginBase):

https://gist.github.com/raincious/6b786a9c7f9e4fa6c0b3

那么问题来了:

1、这样的实现方式可行么?类内元素会不会丢失?会不会出现比如调用出错(比如Undefined behavior)这样奇葩的问题?
2、例子里的delete能完整释放对应对象么?会不会出现内存碎片?

感谢!
536 次点击
所在节点    C
2 条回复
bombless
2015-01-17 20:38:47 +08:00
用一个虚基类表示即可,记得基类的析构函数是虚的。
一般拿个shared_ptr包一下方便点。
raincious
2015-01-17 20:46:18 +08:00
@bombless

好吧,看到你的回复之后找到了这个: http://msdn.microsoft.com/zh-cn/library/hh279669.aspx

貌似这样就没问题了?准备试一下。

感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/163052

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX