1. ホーム
  2. c++

スタック上に確保された変数に対する delete の呼びかけ

2023-07-19 05:02:39

質問

プログラミングのスタイルやデザインを無視して、スタック上に確保された変数に対して delete を呼び出すことは安全ですか?

たとえば

   int nAmount;
   delete &nAmount;

または

class sample
{
public:
    sample();
    ~sample() { delete &nAmount;}
    int nAmount;
}

どのように解決するのですか?

いいえ を呼び出すことは安全ではありません。 delete をスタックに割り当てられた変数上で呼び出すことは安全ではありません。 スタック変数上で delete で生成されたものに対してのみ new .

  • それぞれについて malloc または calloc がある場合、ちょうど1つの free .
  • それぞれについて new には、ちょうど1つの delete .
  • それぞれについて new[] には、ちょうど1つの delete[] .
  • 各スタック割り当てに対して、明示的な解放や削除を行うべきではありません。デストラクタは、該当する場合、自動的に呼び出されます。

一般に、これらのどれかを混ぜて使うことはできません。例えば、ノー free -をつけるか delete[] -をつける new オブジェクトを生成します。 そうすると、未定義の動作になります。