この関数の仕事はdata
を取り、それを離れて格納することですQByteArrayはそのメモリ(QByteArray :: fromRawData)を所有していることを確認し
void store(const QByteArray& data);
我々は機能ストアを持っていると言います。残念ながら、その引数がQByteArray::fromRawData(ptr, size)
で作成された場合は、それとすべてのコピーでptr
が有効である必要があるため、引数を作成した場合は安全ではありません。
したがってstore
は、stereoids上const char*
た又はdetach
とディープコピーを強制するかのようにdata
を治療するために、そのような配列を渡すために、その発信者を禁止するオプションを有していません。これはすべて満足のいくものではなく、特にdata
がCOWでコピーされてstore
に渡された場合、不要なディープコピーが実行されるため、後者はパフォーマンスを傷つけます。
QByteArray
はprivate
の機能を持っていますnulTerminated
私の望むことだけを実行するように見える機能:メモリを所有していない場合、それは深いコピーです。メモリを所有していれば、*this
を返すだけです。本当に
-
二つの質問が回避策
public
施設を利用しますか? ptr
は、戻り値とそのコピーの存続期間中だけ生きていなければならないことを言います。.right(.size())
と言うなら、これはコピーではないようですので、Qtはドキュメントに従って深いコピーを作成する必要があります。しかしそれは本当にそうするのですか?それはあなたのためのソリューションではありませんので(たとえばhere用)のソースを見ると
私が理解しているように、 'QByteArray a(" hello "); QByteArray b = a; b.detach(); 'は望ましくない。 –
私はそれを私的アクセスハックでハックし、nulTerminate関数を呼び出す必要があると思います。お疲れ様でした –