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

时间:2010-08-25 06:45:56

标签: 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"));

除了做这样凌乱的事情之外,我该怎样做才能确保我回来的char*被清理干净?

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

2 个答案:

答案 0 :(得分:6)

为什么不使用

QString s;
3rdPartyObject->3rdPartyMethod( s.toLocal8Bit().data() );

在声明结尾处销毁临时QByteArray将清理所有资源。

答案 1 :(得分:0)

您可以使用智能指针,例如boost::shared_ptrstd::auto_ptr,以便在智能指针超出范围时自动删除内存。