-3

次のコードがあります。

  msg_buf_ptr = std::make_unique<QByteArray>();

  return QDataStream{msg_buf_ptr, QIODevice::WriteOnly};

次のエラーが表示されます。

no known conversion for argument 1 from ‘std::unique_ptr<QByteArray>’ to ‘QByteArray*’

しかし、なぜ?unique_ptrポインターを取る関数に引数として渡されると、shared_ptr自動的に生のポインターに分解されると考えました。そうでない場合、なぜですか?彼らが(通常)そうするなら、なぜこれは失敗するのQByteArrayですか?

を明示的に呼び出すこともできますmsg_buf_ptr.get()が、それは不要なようです。

4

1 に答える 1

1

いいえ、これは特別なケースではありません。標準ライブラリのスマート ポインターは、生のポインターを必要とするコンテキストでは暗黙的に劣化しません。

質問で述べたように、 a から基になる生のポインターにアクセスする適切な方法unique_ptrは、を使用することget()です。これは設計上の機能であり、未定義の動作につながる可能性のある複数所有権のシナリオを誤って引き起こすことを回避することを目的としているようです。

于 2015-03-11T16:59:25.080 に答える