【发布时间】:2019-01-20 19:13:42
【问题描述】:
所以我有一个发出网络请求的函数:
void MyClass::makeRequest()
{
ApiRequest* apiRequest = new ApiRequest();
apiRequest->makeRequest();
connect(apiRequest, &ApiRequest::requestFinished, this, &MyClass:onApiRequestFinished);
}
由于我需要对象 apiRequest 生存直到我的请求完成,所以我调用:
void MyClass:onApiRequestFinished()
{
// do my stuff
// now I can delete my request object ((retrieved using sender()) using deleteLater()
}
既然在这种情况下我没有使用 Qt 父子系统,我该如何使用 C++11 智能指针而不是调用 deleteLater() 来管理内存?
【问题讨论】:
-
根据我的经验,最好不要尝试将 Qt 的父子系统与智能指针混合;也就是说,如果您使用 Qt 的系统来处理 QObject 派生的对象和仅用于非 QObject 派生的对象的智能指针,那么您的生活将不会那么痛苦。
-
除了 Jeremy:如果智能指针指向它,您不应该明确删除(通过
delete或类似的东西)。通常,智能指针明确致力于管理其指针的生命周期。 (不包括不应该单独使用的弱指针)。 -
对我来说,父子系统与
deleteLater无关,因为系统是直接清理子系统。deleteLater的使用与信号槽系统有关。因此,在我看来,您不使用 父子系统 与使用或不使用deleteLater的选择无关。而你确实使用 信号槽系统。 -
是的,我明白了。我问的唯一原因是知道如何使用智能指针处理这种情况。如何让对象在插槽被触发之前存活。
-
更具体地说,我想知道
unique_ptr或shared_ptr是否有办法生存,直到信号被触发然后被删除。
标签: c++ qt c++11 smart-pointers