17

ScopedLockスコープを使い果たしたときにロックを自動的に解放するのに役立つクラスがあります。ただし、問題は次のとおりです。チームメンバーが次のような無効なロックコードを書き込むことがあります。

{
    ScopedLock(mutex);   // anonymous
    xxx;
}

上記のコードは、オブジェクトがすぐScopedLockに構築および破棄されるため、間違っています。そのため、期待される領域をロックできません ( )。そのようなコードをコンパイルしようとすると、コンパイラにエラーが発生するようにします。これはできますか?xxx

警告オプションを検索g++しましたが、正しいオプションが見つかりません。

4

7 に答える 7

4

同じ名前のクラスと削除された関数を使用できます。残念ながら、これには型の前に「class」キーワードを追加する必要があります。

class Guard
{
public:
  explicit Guard(void)
  {
  }
};

static void Guard(void) = delete;

int main()
{
  // Guard(); // Won't compile
  // Guard g; // Won't compile
  class Guard g;
}
于 2016-11-30T19:10:31.473 に答える
1

私の知る限り、gccにはそのようなフラグはありません。静的アナライザーの方がニーズに適している場合があります。

于 2013-04-24T10:36:44.867 に答える