1

在 Qt 4 中,我有以下数组:

QSharedPointer<unsigned char> encrypted(new unsigned char[RSA_size(publickey)]);

如何将这两种分配与新的 Qt 5 创建功能合二为一?

QSharedPointer<T> QSharedPointer::create()
4

1 回答 1

5

您的第一个示例是错误的,不仅会泄漏内存,还会导致 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();
于 2014-01-08T03:59:02.103 回答