質問: delete;`とできるのですが、以下のような挙動になりました(手元のg++ 4.7.2で`-std=gnu++11`として動かしてみました)。 * 宣言自体は問題なく可能 * そのクラスのローカル変数を宣言しようすると、スコープアウト時の破棄でデストラクタが呼ばれるためコンパイルエラー * ポインタを宣言して`new`することは可能(他のメンバ関数も呼べる) * ただし、`delete`を書くとコンパイルエラー このような、「`new`はできるけど`delete`が不可能な上に自動変数にもできない」クラスができあがったのですが、果たして何かに実用できるものなのでしょうか。それとも、じつは「デストラクタを`= delete`するのは未定義」なのでしょうか。
回答: デストラクタを呼べない。そのことには理由があります。 「デストラクタを呼ぶべきではない。」これが理由です。 もっとはっきりと書くなら、「自動解放のタイミングでは適切な処理ができない」「引数をつけて呼び出せないデストラクタを利用しての解放を禁止すべきである。」という状況が考えられます。 プログラマに常に明示的解放を要求することは、必要になる場合があります。そのようなときにデストラクタの削除は効果的です。 オブジェクトの初期化・廃棄は、キャストとmalloc、freeと配置new/deleteで可能です。