智能指针可以替代QObject :: deleteLater()

时间:2018-08-14 02:09:19

标签: c++ qt c++11 smart-pointers

所以我有一个发出网络请求的功能:

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()来管理内存?

1 个答案:

答案 0 :(得分:0)

我认为您不能使用C ++智能指针来解决这个问题,除非在触发apiRequest之前将requestFinished对象存储在某个容器中。

也许替代方法是创建一个ApiRequest::finished()方法用作信号的receiver,然后将this传递给ApiRequest的构造函数,这样{{1 }}可以呼叫finished(),然后在MyClass::onApiRequestFinished()退出后让finished()呼叫delete this,例如:

onApiRequestFinished()

不确定Qt的可行性如何,但值得一试。