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 WaypointWidget(wp2);
WaypointWidget的构造函数为:
WaypointWidget(Waypoint* wp){
_wp = wp;//_wp is declared as private variable inside WaypointWidget.h
}
我担心的是,在某些情况下,wp2将使用与wp相同的地址,并且当deleteLater()导致wp_widget最终被删除时,对应的_wp将被删除。并且因为它具有与wp2相同的地址。 wp2将被删除/受影响。
最佳答案
您为wp_widget而不是deleteLater
调用wp
,因此不会设置相同的地址。如果您尝试访问_wp
析构函数中的WaypointWidget
,则可能出现错误。
我建议您阅读有关RAII的信息。