这个枚举在析构函数中的用途是什么
What is this enum for in the destructor?
// 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
相关文章:
- C++:使用方法调用析构函数的顺序是什么?
- 在析构函数中删除单链表的正确方法是什么?
- 应该是虚拟析构函数吗?但是怎么做呢?
- 什么是带有友元说明符的析构函数
- 这是删除析构函数中的数组的正确方法吗?
- 在C++中为临时库调用析构函数的顺序是什么
- 虚拟析构函数的用途是什么
- Qt:写这个类的析构函数的正确和安全的方法是什么
- 在C++中,析构函数的调用顺序和成员变量的销毁顺序是什么
- C++11 中默认虚拟析构函数的异常规范是什么?
- 调用析构函数以释放C++运算符中的内存的正确方法是什么
- 这个枚举在析构函数中的用途是什么
- 为这个二进制节点类创建析构函数的正确方法是什么
- 我的析构函数需要在这个函数中是什么
- 当您有一个二维数组(C++)时调用析构函数的正确方法是什么?
- 传递到虚拟析构函数的这个额外参数是什么?
- 关于隐式删除虚析构函数的错误信息是什么?
- 变量或对象的内存在程序结束时自动终止,而不是使用析构函数
- 为什么是虚析构函数
- gcov报告的析构函数中的分支是什么?