abort とデストラクタ
デストラクタ:インデックス への移動
プログラム中で abort を呼び出した場合,デストラクタはいっさい呼び出されず,グローバルスコープを持つ変数に対しても呼び出されません。
デストラクタは,delete の呼び出しを通して間接的に,あるいはデストラクタの完全な限定名を使って直接的に,明示的に呼び出せます。new を使って割り当てられたオブジェクトは,delete を使って削除できます。デストラクタの明示的な呼び出しは,new の呼び出しを通してある特定のアドレスに割り当てられたオブジェクトに対してのみ必要です。
#include <stdlib.h>
class X {
public:
.
.
.
~X(){};
.
.
.
};
void* operator new(size_t size, void *ptr)
{
return ptr;
}
char buffer[sizeof(X)];
void main()
{
X* pointer = new X;
X* exact_pointer;
exact_pointer = new(&buffer) X; // buffer のアドレスで
// 初期化されたポインタ
.
.
.
delete pointer; // ポインタの削除に delete を使う
exact_pointer->X::~X(); // メモリの解放のための直接呼び出し
}