Qt 4では、次の配列があります:
QSharedPointer<unsigned char> encrypted(new unsigned char[RSA_size(publickey)]);
新しい Qt 5 create 関数を使用して、2 つの割り当てを 1 つに結合するにはどうすればよいですか?
QSharedPointer<T> QSharedPointer::create()
Qt 4では、次の配列があります:
QSharedPointer<unsigned char> encrypted(new unsigned char[RSA_size(publickey)]);
新しい Qt 5 create 関数を使用して、2 つの割り当てを 1 つに結合するにはどうすればよいですか?
QSharedPointer<T> QSharedPointer::create()
最初の例は間違っており、メモリをリークするだけでなく、UB を引き起こします。を定義すると、要素の配列ではなく、単一の要素のスマート ポインターQSharedPointer<unsigned char>
を定義しているため、ではなく が呼び出されます。delete
delete[]
次のように変更します。
QSharedPointer<unsigned char> encrypted(new unsigned char[RSA_size(publickey)], [](unsigned char* x){ delete[] x; });
つまり、ポインタにカスタムのデリータを提供する必要があります。
最後に、このQSharedPointer::create
関数は、要素の配列ではなく、1 つの要素に対してのみ使用することを想定しており、次のように使用できます。
auto x = QSharedPointer<unsigned char>::create();