abort とデストラクタ
デストラクタ:インデックス への移動
プログラムのいずれかの場所で abort を呼び出すと、デストラクタは、グローバル スコープを持つ変数に対してすら呼び出されません。
デストラクタは、2 つの方法のいずれかによって、明示的に呼び出すことができます:delete への呼び出しによって間接的に、または、デストラクタの完全修飾名を使用して直接的に呼び出します。delete を使用すると、new を使用して割り当てられたオブジェクトを破壊することができます。デストラクタへの明示的な呼び出しは、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; // pointer initialized at
// address of buffer
// …
delete pointer; // delete used to destroy pointer
exact_pointer->X::~X(); // direct call used to deallocate
}