我正在使用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;
答案 0 :(得分:6)
为什么不使用
QString s;
3rdPartyObject->3rdPartyMethod( s.toLocal8Bit().data() );
在声明结尾处销毁临时QByteArray将清理所有资源。
答案 1 :(得分:0)
您可以使用智能指针,例如boost::shared_ptr或std::auto_ptr,以便在智能指针超出范围时自动删除内存。