内存清理问题将QString转换为char*以便与第三方库一起使用,如何解决?

Jak*_*les 0 c++ qt memory-leaks

我正在使用Qt的第三方库,需要char*字符串.我使用以下代码将我的QString转换为char*

char* toCharArray(const QString &string)
{
    QByteArray bytes = string.toLocal8Bit();
    char* data = new char[bytes.count() + 1];
    strcpy(data, bytes.data());
    return data;
}

// later on...

3rdPartyObject->3rdPartyMethod(toCharArray("someFile"));
Run Code Online (Sandbox Code Playgroud)

char*除了做这样凌乱的事情外,我该怎样做才能确保我的回归得到清理?

char* path = toCharArray("someFile");
3rdPartyObject->3rdPartyMethod(path); // The class and method called can differ
delete[] path;
Run Code Online (Sandbox Code Playgroud)

Mic*_*son 6

为什么不用

QString s;
3rdPartyObject->3rdPartyMethod( s.toLocal8Bit().data() );
Run Code Online (Sandbox Code Playgroud)

在语句结束时销毁临时QByteArray将清理所有资源.

  • 甚至更好:尽可能使用constData()(函数采用const char*).保存额外的分离(data()可能会在内部不必要地复制数据) (3认同)