//DeleteObject.h













//DeleteObject.cpp



















//item.h












//main.cpp
#include "DeleteObject.h"
#include "Item.h"
DeleteObject del;
del.DeleteItem(new Item);
/////////////////////////////////
结果Item的析构函数没有被调用~
这是因为DeleteObject并不知道Item的详细定义,这是C++中一个很危险的错误!(还好编译器一般都给warning)
怎么解决这个问题呢?
利用Boost库中的checked_delete
定义如下:
















可以看到利用C的一个语法——数组长度必须大于零,来解决这个问题,typedef是发生在编译期,而sizeof同样是在编译期,所以这两行代码不会对程序的效率空间等等产生任何影响,只会在上面所举的例子发生的时候报编译错误。
现在将代码改为:




