サンプルの動作確認バージョン [GCC4.4/1.41.0] [VC9/1.41.0]
#include <boost/utility.hpp>
class Hoge;
Hoge* CreateHoge();
int main()
{
Hoge* ptr = CreateHoge();
...
boost::checked_delete( ptr ); // ここでコンパイルエラー
return 0;
}
class Hoge; ととりあえずクラス名を宣言しておくと、
Hoge の中身はわからずともとりあえず
Hogeへのポインタや参照だけは扱うソースが書けます。
しかしそこで、そのポインタをdeleteしようとすると、
Hogeクラスをどーやってデストラクトしてよいか、
コンパイラにはわからないので上手く動きません。そこで、
ちゃんとdeleteできるポインタかどうかチェックしつつ削除…
というのがこの関数の役目です。
…でも、大抵のコンパイラならこれ無しでも検出して警告してくれると思う…。
「単に、引数に対してdeleteを適用する関数」として、STL のアルゴリズムなどに渡すために使うこともできます。