1

Qt 4では、次の配列があります:

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

新しい Qt 5 create 関数を使用して、2 つの割り当てを 1 つに結合するにはどうすればよいですか?

QSharedPointer<T> QSharedPointer::create()
4

1 に答える 1

5

最初の例は間違っており、メモリをリークするだけでなく、UB を引き起こします。を定義すると、要素の配列ではなく、単一の要素のスマート ポインターQSharedPointer<unsigned char>を定義しているため、ではなく が呼び出されます。deletedelete[]

次のように変更します。

QSharedPointer<unsigned char> encrypted(new unsigned char[RSA_size(publickey)], [](unsigned char* x){ delete[] x; });

つまり、ポインタにカスタムのデリータを提供する必要があります。

最後に、このQSharedPointer::create関数は、要素の配列ではなく、1 つの要素に対してのみ使用することを想定しており、次のように使用できます。

auto x = QSharedPointer<unsigned char>::create();
于 2014-01-08T03:59:02.103 に答える