C++ qt,这是以后使用Delete的安全方法吗?
Qt表示在事件循环返回后调用deleteLater。 因此,如果我有以下代码:C++ qt,这是以后使用Delete的安全方法吗?,c++,qt,C++,Qt,Qt表示在事件循环返回后调用deleteLater。 因此,如果我有以下代码: Waypoint* wp = new Waypoint(); WaypointWidget* wp_widget = new WaypointWidget(wp); ... delete wp; wp_widget->deleteLater(); ... Waypoint* wp2 = new Waypoint(); WaypointWidget* wp_widget2 = new Waypoi
Waypoint* wp = new Waypoint();
WaypointWidget* wp_widget = new WaypointWidget(wp);
...
delete wp;
wp_widget->deleteLater();
...
Waypoint* wp2 = new Waypoint();
WaypointWidget* wp_widget2 = new WaypointWidget(wp2);
WaypointWidget的构造函数是:
WaypointWidget(Waypoint* wp){
_wp = wp;//_wp is declared as private variable inside WaypointWidget.h
}
我担心的是,在某些情况下,wp2将采用与wp相同的地址,当deleteLater()导致最终删除wp_小部件时,相应的_wp将被删除。因为它和wp2的地址相同。wp2将被删除/影响。您稍后为wp\u小部件调用
delete
,而不是为wp
,因此不会设置相同的地址。如果您试图访问WaypointWidget
析构函数中的wp
,则可能会出现错误
我建议您阅读有关RAII的内容。wp2获得新地址,因为您为其分配了新的
Waypoint()
。如果我理解@Nyaruko的问题,因为我们已经删除了wp实例,即内存现在是可用的,如果内存分配器认为是可用的,可以为较新的wp2实例提供内存。在此之后,事件循环将拾取wp_小部件删除事件并调用其析构函数。您正在删除小部件析构函数中的_wp吗?你能展示WaypointWidget析构函数和成员声明的代码吗?@Nyaruko那么为什么你认为\u wp
会被删除?@Nyaruko除非你用它做些什么,否则什么都不做。如果它在被删除后没有被碰过,那么它可能是安全的,但这仍然不是正确的方法<代码>航路点小部件应拥有航路点
<代码>航路点小部件应该是删除航路点
的小部件<代码>航路点不应从航路点小部件
外部删除。