■
不完全な型のポインタを 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) だ。