QSharedPointer:: Create()
В Qt 4 у меня есть следующий массив:
QSharedPointer<unsigned char> encrypted(new unsigned char[RSA_size(publickey)]);
Как я могу объединить два распределения в одном с новой функцией Qt 5 create?
QSharedPointer<T> QSharedPointer::create()
1 ответ
Решение
Ваш первый пример неверен и не только утечет память, но и вызовет UB. Когда вы определяете QSharedPointer<unsigned char>
вы определяете умный указатель для одного элемента, а не для массива элементов, поэтому delete
будет называться, а не delete[]
,
Измените это на:
QSharedPointer<unsigned char> encrypted(new unsigned char[RSA_size(publickey)], [](unsigned char* x){ delete[] x; });
То есть: вы должны предоставить специальный указатель удаления.
Наконец, QSharedPointer::create
Функция должна использоваться только для одного элемента, а не для массива элементов, и ее можно использовать с:
auto x = QSharedPointer<unsigned char>::create();