qt,这是使用deleteLater的安全方法吗?

时间:2014-12-01 09:25:37

标签: 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 WaypointWidget(wp2);

WaypointWidget的构造函数是:

WaypointWidget(Waypoint* wp){
  _wp = wp;//_wp is declared as private variable inside WaypointWidget.h
}

我担心的是,在某些情况下, wp2 将使用与 wp 相同的地址,并且当deleteLater()导致 wp_widget <时/ em>最终被删除。相应的 _wp 将被删除。因为它与 wp2 具有相同的地址。 wp2 将被删除/影响。

1 个答案:

答案 0 :(得分:2)

您为wp_widget调用deleteLater,而不是wp,因此不会设置相同的地址。如果您尝试访问_wp析构函数中的WaypointWidget,可能会出现错误。

我建议你阅读RAII。