所以我有一个发出网络请求的函数:
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()
来管理内存?
我认为在触发requestFinished
之前,如果不将apiRequest
对象存储在某个容器中,则无法使用C++智能指针来解决此问题。
也许另一种选择是创建一个ApiRequest::finished()
方法用作信号的receiver
,然后将this
传递给ApiRequest
的构造函数,以便finished()
可以调用MyClass::onApiRequestFinished()
,然后在onApiRequestFinished()
退出后调用finished()
delete this
,例如:
void MyClass::makeRequest()
{
ApiRequest* apiRequest = new ApiRequest(this);
apiRequest->makeRequest();
}
void MyClass::onApiRequestFinished()
{
// do my stuff
}
...
ApiRequest::ApiRequest(MyClass *cls)
: m_cls(cls)
{
connect(this, &ApiRequest::requestFinished, this, &ApiRequest::finished);
}
void ApiRequest::finished()
{
m_cls->onApiRequestFinished();
delete this;
}
不确定Qt的可行性如何,但也许值得一试。