gpt4 book ai didi

c++ - 智能指针作为 QObject::deleteLater() 的替代品

转载 作者:太空狗 更新时间:2023-10-29 23:11:07 24 4
gpt4 key购买 nike

所以我有一个函数可以发出网络请求:

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

最佳答案

我认为如果不将 apiRequest 对象存储在某个容器中,直到触发 requestFinished ,您才能使用 C++ 智能指针解决此问题。

也许另一种方法是创建一个 ApiRequest::finished() 方法用作信号的 receiver,然后传递 thisApiRequest 的构造函数,这样 finished() 可以调用 MyClass::onApiRequestFinished(),然后 finished()onApiRequestFinished() 退出后调用 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++ - 智能指针作为 QObject::deleteLater() 的替代品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51832787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com