C ++对象赋值为NULL

时间:2011-02-17 14:46:55

标签: c++ boost null

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

boost::function<void()> func;
func = NULL;

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

func = 1;

4 个答案:

答案 0 :(得分:3)

使用指针参数进行运算符重载。来自激励来源:

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

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

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

答案 1 :(得分:1)

我不知道你到底想要做什么,但这可能会有所帮助:

boost::function<void()> *pFunc;
pFunc = NULL;

顺便说一句,在C ++中,你大多写0或nullptr而不是NULL。

答案 2 :(得分:1)

boost::function可以在其赋值运算符中接受指向函数的指针。指针可以是有效指针或NULL(表示0)。尝试传递int时出错的原因是您无法为指针分配整数。这就像尝试执行以下操作:

char* c = 1;

哪个也不会编译。

答案 3 :(得分:0)

正如您所见{4}} std :: function有nullptr_t的赋值运算符