gsoap 和 qt 转换变量内存句柄

gsoap and qt convert variables memory handle

本文关键字:内存 句柄 变量 转换 qt gsoap      更新时间:2023-10-16

我使用此代码将 Qstring 转换为 gsoap 标准wchar_t;

wchar_t *MGsoapQtChanger::toGsoap(QString str)
{
    s= new wchar_t[str.size()+1];
    int i=str.toWCharArray(s);
    s[i]='';
    return s;
}

它对我有好处。 但问题是我做了新的wchar_t并且我没有删除它,因为我需要将其发送给我的客户。 如何在为我的客户端发送此变量后将其删除。

///crunable.cpp///
#include "crunable.h"
CRunable::CRunable()
{
}
void CRunable::run()
{
c->serve();
c->destroy();
delete c;
}
void CRunable::setParam(calcService *c)
{
    this->c=c;
}
///convert function///////
wchar_t *MGsoapQtChanger::toGsoap(QString str)
{
    s= new wchar_t[str.size()+1];
    int i=str.toWCharArray(s);
    s[i]='';
    return s;
}
///listen function//
void MListen::listen()
{
    memcService calcS(SOAP_XML_INDENT);
    if (calcS.run(80) != SOAP_OK)
    calcS.soap_stream_fault(std::cerr);
    calcS.destroy(); // same as:soap_destroy(calc.soap);
    soap_end(calc.soap);
}
int memcService::uppercase(wchar_t *str, wchar_t *&r){
    MGsoapQtChanger mg;
    QString s= mg.toQt(str);
    s=s.toUpper();
    r=mg.toGsoap(s);
    return SOAP_OK;
}

一般来说,当你想写new T[]时,写vector<T>。除了实现 vectorstring 等低级容器外,我还没有找到在几年C++使用中不得不使用数组新形式的合法情况。

但是,在这种特殊情况下,您也可以考虑wstring

wstring res;
res.resize(str.size());
int i = str.toWCharArray(&s[0]);
res.resize(i);
return res;