不完全な型のポインタを delete することは可能である。ただし、なにが起こるか判らない。空からかわいい女のコが降ってくるかもしれない。

class A;

A* create_instance();

int main(int, char* []) {

A* a = create_instance();
delete a;

return 0;
}

#include <iostream>

class A {
public:
A();
~A();
};

A::A() {
std::cout << "A::(constructor)" << std::endl;
}

A::~A() {
std::cout << "A::(destructor)" << std::endl;
}

A* create_instance() {
return new A();
}

実際のところ(たぶん)降っては来ないが、それは上記のふたつのコードをコンパイルしてみれば判るだろう。gcc 3.3 でコンパイルして実行すると、class A のデストラクタは実行されない(もちろん、どんな動作をするのかはコンパイラによって異なる)。この事態を確実に避けるために提供される手段が boost::checked_delete(r) だ。