// 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是一个模板参数
我知道我们不能删除一个空指针,否则会引发异常。所以在这种情况下,枚举定义必须做一些防止这种情况的事情。在生产中,有时我们不想仅仅因为有一个空指针而结束程序,我们可能希望查看替代方案,当指针为空时。这段代码在生产中几乎无处不在吗?
谢谢大家。
delete
时,它会删除指向的对象,并将内存返回给运行时,但是指针本身仍然保持不变。如果您再次应用delete
,它将访问属于运行时而不是应用代码的内存,并且不再包含“活动”对象...这会带来麻烦。另一方面,空指针不指向任何地方,因此在尝试访问所指向的内存之前,delete
的实现应该检查此条件。 - Matthieu M.