サンプルの動作確認バージョン [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 のアルゴリズムなどに渡すために使うこともできます。