C++对象赋值为NULL

Jar*_*edC 5 c++ null boost

我正在查看一些使用Boost.Function的代码,并且有一个关于如何编写代码以允许赋值为NULL的问题.我试图追踪相应的Boost代码,但无法进行.基本上,是什么让这成为可能?

boost::function<void()> func;
func = NULL;
Run Code Online (Sandbox Code Playgroud)

编辑:以下不能为我编译,所以他们如何防止这种情况?

func = 1;
Run Code Online (Sandbox Code Playgroud)

b10*_*10y 3

通过带有指针参数的运算符重载。来自升压源:

#ifndef BOOST_NO_SFINAE
   self_type& operator=(clear_type*)
   {
     this->clear();
     return *this;
   }
#endif
Run Code Online (Sandbox Code Playgroud)

这并不意味着“func”本身是NULL,实际上您可以访问它自己的函数。以下代码可以编译并且不会崩溃。

TEST_F(CppTest, BoostFunctions) {
    boost::function<void()> func;
    func = NULL;
    ASSERT_TRUE(func==NULL);
    ASSERT_FALSE(func.has_trivial_copy_and_destroy());
}
Run Code Online (Sandbox Code Playgroud)