このインスタンスを明示的または暗黙的に削除することはできないことを理解しています。
それ以上に、インスタンスを破棄することはできません。それを削除するかどうかに関係なく。
自動変数 (または必要に応じて「スタック割り当て」) を宣言すると、プログラムが宣言のポイントに到達したときにインスタンスが作成されるだけではありません。また、プログラムがそのブロックを離れたときに破棄されます。削除されたデストラクタでは、それができないため、宣言は許可されません。
これにより、プログラムまたはスレッドの終了時に変数を破棄するコードも生成されるため、静的変数またはスレッドローカル変数を宣言することもできなくなります。
したがって、これらのいずれかを作成する唯一の方法は を使用new
することです。一度作成すると、それを破棄することはできません。ただし、これでスタック割り当てが完全に妨げられるわけではありません。
char memory[sizeof(FS_Only)] alignas(FS_Only);
FS_Only * not_fs = new (memory) FS_Only;
また、なぜこれが必要なのですか?
私の見解では、あなたはそうしないでしょう。強制的なメモリ リークは、オブジェクトが間違ったタイミングで破棄されないようにする恐ろしい方法です。代わりに、 RAIIなどの手法を使用して、動的な有効期間が必要なオブジェクトを管理し、使用後にオブジェクトを削除する責任を負う適切に定義された所有者 (または共有所有者) が常に存在するようにします。C++11 標準ライブラリのスマート ポインターは、出発点として適しています。