在 Qt 4 中,我有以下数组:
QSharedPointer<unsigned char> encrypted(new unsigned char[RSA_size(publickey)]);
如何将这两种分配与新的 Qt 5 创建功能合二为一?
QSharedPointer<T> QSharedPointer::create()
在 Qt 4 中,我有以下数组:
QSharedPointer<unsigned char> encrypted(new unsigned char[RSA_size(publickey)]);
如何将这两种分配与新的 Qt 5 创建功能合二为一?
QSharedPointer<T> QSharedPointer::create()
您的第一个示例是错误的,不仅会泄漏内存,还会导致 UB。当您定义 a 时,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();