2011-05-18 30 views
0

我使用gSOAP从SOAP webservice请求信息gSOAP在请求完成后删除对象中的引用值

soap webservice返回一个对象。 我做了一个名为呼叫请求:“dataconnector”

在dataconnector我可以输出返回的对象 但外面,在对象中的所有引用值的所有值都为空。

我做了一些搜索和apperantly 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 apperantly你需要断开链接的对象

这样的所有单独的值:

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

是不是有eazier方式?

回答

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! 
+0

thx,不敢相信我没试过:s – Berty 2011-05-20 19:40:30

+0

没问题:-)。 – 2011-05-20 20:41:00