gsoap和qt转换变量内存句柄

时间:2016-01-30 05:51:29

标签: c++ qt gsoap

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

wchar_t *MGsoapQtChanger::toGsoap(QString str)
{
    s= new wchar_t[str.size()+1];
    int i=str.toWCharArray(s);
    s[i]='\0';
    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]='\0';
    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;
}

1 个答案:

答案 0 :(得分:0)

通常,当您想要写new T[]时,请改为编写vector<T>。我没有找到一个合法的案例,除了实现vectorstring之类的低级容器之外,我必须在C ++使用的几年中使用数组新形式。

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

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