Jos*_*gal 2 c++ pointers destructor smart-pointers
这个问题来自我试图了解智能指针的动机,在该指针周围创建一个包装类,以便您可以添加自定义析构函数。指针(和整数、布尔值、双精度数等)没有析构函数吗?
从技术上讲,非类类型(C++ 术语在外行话中通常称为“原始类型”)没有析构函数。
C++ 标准仅在类的上下文中谈到真正的析构函数,请参阅 C++ 标准中的 [class.dtor]。除此之外,C++ 还允许使用相同的符号在非类对象上调用析构函数,即以下代码是有效的:
void foo(int z) {
using T = int;
z.~T();
}
Run Code Online (Sandbox Code Playgroud)
这称为“伪析构函数”,专门用于编写通用模板代码,以相同的方式处理类和非类类型。这个调用什么都不做。此语法在 C++ 标准中的 [expr.prim.id] 中定义。
原始类型(及其复合类型)具有简单的析构函数。这些不做任何事情,并且有特殊的措辞,允许在某些情况下完全跳过它们。
然而,这与 C++ 拥有智能指针的原因是正交的。原始指针是非拥有的:它指向另一个对象,但不影响其生命周期。另一方面,智能指针拥有(或共享)其指针对象,将其生命周期与自己的生命周期联系在一起。除其他特殊函数外,这就是它们的析构函数内部实现的内容。