Нубский вопрос по C++/Qt, навеянный http://www.linux.org.ru/forum/development/5610360 .
Есть такой кусок кода:
const char *fname = fileName.toAscii().constData();
// <--- здесь делаются какие-то действия, в которых может выделяться память
// <--- здесь должен использоваться fname
hf = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
fileName — переменная типа QString.
Как я понял, метод toAscii возвращает объект типа QByteArray, от которого берется constData и объект сразу же уничтожается (потому что выходит из области видимости). В результате указатель, возвращаемый constData(), подвисает, и эти данные могут испортиться (и вроде как портятся) при любой операции, в которой выделяется новая память.
1) Прав ли я?
2) Как исправить эту ошибку? Правильно ли писать так:
QByteArray barray = fileName.toAscii()
const char *fname = barray.constData();
// ...
3) Если пункт 1 верен, то (в порядке критики C++) насколько это распространенные грабли?