请求完成后,gSOAP将删除对象中的引用值

时间:2011-05-18 12:39:10

标签: c++ web-services qt pointers gsoap

我正在使用gSOAP从SOAP Web服务

请求信息

soap webservice返回一个对象。 我在一个叫做“dataconnector”

的电话中做了请求

在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);

是不是有一种更好的方式?

1 个答案:

答案 0 :(得分:1)

这不是特定的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!