次のコードスニペットでは、あまりにも多くの時間を追いかけてメモリリークが発生しています。問題は、Foo()の内部では、ローカル変数x_がメンバー変数x_を隠すことです。コンパイラがそれについて私に警告していたかもしれないので、それはかなり面倒です。そのような警告のためにGCCにフラグがありますか? (好奇心の場合:私は、メンバ変数にそれを変更する、最初のローカル変数を使用して、バグコードに到着するが、型宣言を除去するために忘れている)メンバ変数を隠すことについての警告?
struct A {
A() x_(NULL) {}
~A() {
delete x_;
}
void Foo() {
HugeThingy* x_ = new HugeThingy();
x_->Bar("I. Need. Garbage. Collection. Now.");
}
HugeThingy* x_;
DISALLOW_COPY_AND_ASSIGN(A); // Macro to prevent copy/assign.
}
何人かの人は、ポインタと動的割り当てではなくプレーンな文字列オブジェクトを使うべきだと言いました。あなたが実際にメンバー変数を隠すローカル変数を宣言したときに警告を出す方法を知りたいのであれば、あなたの質問を明確にすることをお勧めします。 –
ポインタをメンバ変数として使用しているので、コピーコンストラクタと代入演算子を用意してください。 –
これらを指定しない場合は、少なくともデフォルトを抑制してください。 –