这个枚举在析构函数中的用途是什么

What is this enum for in the destructor?

本文关键字:是什么 析构函数 枚举      更新时间:2023-10-16
// Destructor.  If there is a C object, delete it.
// We don't need to test ptr_ == NULL because C++ does that for us  
    ~scoped_ptr() {
       enum { type_must_be_complete = sizeof(C) };
       delete ptr_;
    }

注意:C 是模板参数

我知道我们不能删除空指针,会引发异常。因此,在这种情况下,枚举定义必须采取措施来防止这种情况发生。在生产中,有时我们不想简单地结束程序,因为我们有一个空指针,我们可能想看看替代场景,当指针为空时。而且这段代码在生产中使用,几乎无处不在?

谢谢大家。

实际上是删除的静态断言。 实现想知道它是否正在处理在删除变量之前其声明可见的类型,而不是前向声明。

当您询问不完整类型的大小时,编译器将发出错误:

struct S;
enum { Size = sizeof(S) };

更新

正如你的编译器和Matthieu M.会告诉你的那样 - delete -ing一个不完整的类型是未定义的。

提升checked_deleter似乎更好:

template<class T> struct checked_deleter
{
    typedef void result_type;
    typedef T * argument_type;
    void operator()(T * p) const;
};

因为某些编译器可能会返回 0,而 T 是未定义的,在这种情况下

enum { type_must_be_complete = sizeof(T) };

是有效的静态断言,但checked_deleter将失败。

http://www.boost.org/doc/libs/1_59_0/libs/core/doc/html/core/checked_delete.html#core.checked_delete.checked_deleter