关于C++对象释放顺序,请教大侠们!

发布于 2022-08-24 00:47:47 字数 492 浏览 11 评论 3

麻烦哪位赐教一直想不通的问题:
假如使用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

独孤求败 2022-08-28 06:48:05

这种释放顺序的问题,基本上涉及到切换的,都可能遇到。我就碰到过无数次。

总得思路来说呢,我是在上层多加判断,不能使之重复调用释放的过程。
在GTK+中,我一般是使用g_object_ref和g_object_unref实现对象的引用记数。

期待兄弟们更好的方法!

岁月静好 2022-08-27 12:23:39

问题就在于如果很多页面且不是很占用内存?像一些手机或操作系统等页面很多,应该不是隐藏来实现的,哪位能不能说说经典的处理方法?

夜血缘 2022-08-26 08:01:16

显示screen-2的时候 把screen-1 隐藏而不是销毁不是更好吗?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文