3

-Weffc++ フラグを追加すると、コード内に 2 つの実際のバグが既に検出されているため、残しておきたいと思います。残念ながら、次のようになります。

record-set.h:60:7: warning: ‘class RecordSet’ has pointer data members [-Weffc++]
record-set.h:60:7: warning:   but does not override ‘RecordSet(const RecordSet&)’ [-Weffc++]
record-set.h:60:7: warning:   or ‘operator=(const RecordSet&)’ [-Weffc++]

警告は正確です。Aは、基本的に一致ルールRecordSetのサブセットです。std::vector< Record >(実際には、それを含むデータ構造と、Recordが持つフィールドの定義を指します。) レコードを更新するときに、元のレコードを更新する必要があるため、ポインター データ メンバーがあります。

https://github.com/c42f/tinyformat/pull/4は、必要な関数を非公開として宣言し、使用しないというアイデアを提供します。残念ながら、私はRecordSet関数から a を返すようなことをしているので、コピー コンストラクターが実際にデフォルトの動作で存在する必要があります。

理想的なのは、gcc に「はい、本当に、ここで例外が必要ですが、他に問題がある場合は警告してください」と伝えるインライン コメントを見つけることです。

次善の策は、これら 2 つの関数の独自のバージョンを作成して、既定の機能とまったく同じことを行うことです。残念ながら、それらを正確に正しく取得する能力に自信がありません。誰かが標準的な例を教えてもらえますか?

もちろん、最も簡単な方法は、このフラグをオフにすることです。しかし、それが私にとって本当のバグをキャッチしたことを考えると、それは避けたいと思います。

4

0 に答える 0