gpt4 book ai didi

c++ - gSOAP 在请求完成后删除对象中的引用值

转载 作者:行者123 更新时间:2023-11-28 08:20:17 28 4
gpt4 key购买 nike

我正在使用 gSOAP 从 SOAP 网络服务请求信息

soap 网络服务返回一个对象。我在名为“dataconnector”的调用中执行请求

在数据连接器中,我可以输出返回对象的所有值但除此之外,对象中的所有引用值均为 null。

我做了一些搜索,显然 gSOAP 会删除所有内容,除非您使用 soap_unlink() 从释放链中删除

我试过了,但没有用这是我的代码

我做错了什么?

QList<ns1__calls*> calls;

datacheckPortBindingProxy service;
ns1__getCalls request;
std::string un("4444");
request.username = &un;
ns1__getCallsResponse response;
if (service.getCalls(&request, &response) == SOAP_OK){
qDebug() << "succesfull response";
for(unsigned int i = 0; i< response.return_.size(); i++){
ns1__calls* call = response.return_.at(i);

qDebug() << QString(call->roomId->c_str());
qDebug() << " with type_id: " << (call->typeId-1) ;

calls.append(call);
soap_unlink(request.soap, call);
}

编辑

nvm显然你需要取消链接对象的所有单独值

像这样:

soap_unlink(response.soap, call->roomId);
soap_unlink(response.soap, call->display);
soap_unlink(response.soap, call->location);
soap_unlink(response.soap, call->staffAidId);
soap_unlink(response.soap, call->firstName);
soap_unlink(response.soap, call->lastName);

有没有更简单的方法?

最佳答案

这不是特定的 gSOAP 或网络服务问题。当变量 response 超出范围时,它会释放它已使用的内存,在我看来,您真的不应该取消链接 gSOAP 保留的内存。如果您取消链接,您有责任释放它!

方法是复制 ns1__calls 指针引用的对象。

QList<ns1__calls> calls; // QList of instances instead of pointers
...
calls.append(*call); // append a copy
// soap_unlink(request.soap,call); // not needed!

关于c++ - gSOAP 在请求完成后删除对象中的引用值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6044771/

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