Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ qt,这是以后使用Delete的安全方法吗?_C++_Qt - Fatal编程技术网

C++ qt,这是以后使用Delete的安全方法吗?

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

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_小部件时,相应的_wp将被删除。因为它和wp2的地址相同。wp2将被删除/影响。

您稍后为wp\u小部件调用
delete
,而不是为
wp
,因此不会设置相同的地址。如果您试图访问
WaypointWidget
析构函数中的
wp
,则可能会出现错误


我建议您阅读有关RAII的内容。

wp2获得新地址,因为您为其分配了新的
Waypoint()
。如果我理解@Nyaruko的问题,因为我们已经删除了wp实例,即内存现在是可用的,如果内存分配器认为是可用的,可以为较新的wp2实例提供内存。在此之后,事件循环将拾取wp_小部件删除事件并调用其析构函数。您正在删除小部件析构函数中的_wp吗?你能展示WaypointWidget析构函数和成员声明的代码吗?@Nyaruko那么为什么你认为
\u wp
会被删除?@Nyaruko除非你用它做些什么,否则什么都不做。如果它在被删除后没有被碰过,那么它可能是安全的,但这仍然不是正确的方法<代码>航路点小部件应拥有
航路点
<代码>航路点小部件应该是删除
航路点
的小部件<代码>航路点不应从
航路点小部件
外部删除。