我不明白boost :: checked_delete的目的.文件说:
在5.3.5/5中,C++标准允许使用delete-expression删除指向不完整类类型的指针.当类具有非平凡的析构函数或类特定的运算符delete时,行为是未定义的.有些编译器会在删除不完整的类型时发出警告,但不幸的是,并非所有编译器都会发出警告,程序员有时会忽略或禁用警告.
提供的函数和类模板可用于防止这些问题,因为它们需要完整的类型,否则会导致编译错误.
因此,C++标准允许您删除不完整的类型,如果类型具有非平凡的析构函数,则会导致未定义的行为.什么?一个不完整的类型怎么可能有任何析构函数?不完整的类型只是原型吗?
有许多令人印象深刻的Boost库,如Boost.Lambda或Boost.Phoenix,它们使C++成为一种真正的功能语言.但有没有一种直接的方法可以从任何2个或更多任意函数或函子创建复合函数?
如果我有:int f(int x)
并且int g(int x)
,我想做一些像f . g
静态生成一个新的函数对象的东西f(g(x)).
这似乎可以通过各种技术实现,例如这里讨论的技术.当然,您可以链接调用boost::lambda::bind
以创建复合仿函数.但是Boost中是否有任何东西可以轻松地让你接受任何2个或更多的函数或函数对象并将它们组合起来创建一个复合函子,类似于你在Haskell这样的语言中的表达方式?