用于自动存储的析构函数

Destructors for automatic storage

本文关键字:析构函数 存储 用于      更新时间:2023-10-16

我读到,当我们到达自动变量的范围结束时,会调用一个自动变量来清理资源。

那么,基本数据类型有析构函数吗? 或者这里调用析构函数来清理资源的含义与在其作用域结束时删除自动变量不同?

具有析构函数的对象将在对象的生存期结束时调用它们。

没有析构函数的对象(例如intfloat等基元类型的变量(仍将结束其生命周期,但没有调用析构函数(因为没有任何要调用的析构函数(。

嗯....他们有点破坏者。例如,此代码将编译(尽管它在技术上会调用未定义的行为,因为它将具有两次破坏int的效果(:

using foo = int;
void main()
{
foo i;
i.~foo();
}

但请注意两件事:(1(using是必要的(C++不想看到~int(,以及(2(它什么都不做。对于某些模板用例,将基元类型视为具有真实的函数类型析构函数很重要(这使得实现std::vector之类的东西变得更加容易(,但是基元类型不拥有任何资源,因此销毁它们是没有操作的。