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();
Другие вопросы по тегам