Как решить проблему с очисткой памяти при преобразовании QString в char * для использования со сторонней библиотекой? - PullRequest
0 голосов
/ 25 августа 2010

Я использую стороннюю библиотеку с 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 ]

6 голосов
/ 25 августа 2010

Почему бы просто не использовать

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

Уничтожение временного QByteArray в конце оператора очистит все ресурсы.

0 голосов
/ 25 августа 2010

Вы можете использовать умный указатель, такой как boost :: shared_ptr или std :: auto_ptr , чтобы память автоматически удалялась, когда умный указатель выходит за рамки.*

...