智能指针作为 QObject::d eleteLater() 的替代品
Smart pointers as an alternative to QObject::deleteLater()
所以我有一个发出网络请求的函数:
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的可行性如何,但也许值得一试。
相关文章:
- C++中原子的替代品<variant>
- C++sscanf_s的替代品
- getline的替代品
- 什么是 std::function::argument_type 的替代品?
- QObject::d eleteLater在我的Qt测试中没有像预期的那样调用
- 有DirectShow的替代品吗?
- 智能指针作为 QObject::d eleteLater() 的替代品
- C++中 mktime 的替代品
- 对于C++,是否有任何现代的 std::strchr() 替代品?
- shared_future是<void>condition_variable的合法替代品吗?
- 这是山塔的替代品
- STD :: Referent_wrapper/std :: std :: vector的selution_ptr替代品
- 更好的替代品?
- 排序向量上 std::find_if 和 std::bind2nd 的替代品
- 提升勒让德多项式的 gsl_sf_legendre_sphPlm_array() 替代品
- 标准::矢量的高性能替代品
- c++线程池:std::函数的替代品,用于将函数/lambdas传递给线程
- SHGetSpecialFolderLocation是否有新的替代品?
- cstdlib 的 rand() 的替代品
- Borland Developer Studio的开源替代品