关于C++对象释放顺序,请教大侠们!
麻烦哪位赐教一直想不通的问题:
假如使用C++和GTK(或者其他图形库,例如SDL等)编写一个UI,共两个页面screen-1,screen-2(两个页面都继承于screen对象),screen-1有成员button-1,该button-1点击后执行button-1成员函数next_screen(),主要完成两个任务:new screen-2和delete screen-1(会释放screen-1自己和其下所有成员)。哪位能说一下在next_screen()中delete screen-1后,显然button-1也被释放了,其成员函数next_screen()是不是也被释放了?那么在next_screen()中执行delete screen-1后返回时候会不会有问题(button-1可能释放了next_screen()堆栈)?因为在编写一个UI时候碰到过连续多次在两个screen中切换(new一个新screen同时释放现在的screen)偶尔会出现Segmentation fault,检查了代码觉得这里有疑问,但一直没有找到写好的例子,向cu里的大侠们请教!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这种释放顺序的问题,基本上涉及到切换的,都可能遇到。我就碰到过无数次。
总得思路来说呢,我是在上层多加判断,不能使之重复调用释放的过程。
在GTK+中,我一般是使用g_object_ref和g_object_unref实现对象的引用记数。
期待兄弟们更好的方法!
问题就在于如果很多页面且不是很占用内存?像一些手机或操作系统等页面很多,应该不是隐藏来实现的,哪位能不能说说经典的处理方法?
显示screen-2的时候 把screen-1 隐藏而不是销毁不是更好吗?