繁体   English   中英

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

[英]qt, is this the safe way to use deleteLater?

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而不是wp调用deleteLater ,因此将不会设置相同的地址。 如果您尝试在WaypointWidget析构函数中访问_wp ,则可能出现错误。

我建议您阅读有关RAII的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM