用于自动存储的析构函数
Destructors for automatic storage
我读到,当我们到达自动变量的范围结束时,会调用一个自动变量来清理资源。
那么,基本数据类型有析构函数吗? 或者这里调用析构函数来清理资源的含义与在其作用域结束时删除自动变量不同?
具有析构函数的对象将在对象的生存期结束时调用它们。
没有析构函数的对象(例如int
或float
等基元类型的变量(仍将结束其生命周期,但没有调用析构函数(因为没有任何要调用的析构函数(。
嗯....他们有点破坏者。例如,此代码将编译(尽管它在技术上会调用未定义的行为,因为它将具有两次破坏int
的效果(:
using foo = int;
void main()
{
foo i;
i.~foo();
}
但请注意两件事:(1(using
是必要的(C++不想看到~int
(,以及(2(它什么都不做。对于某些模板用例,将基元类型视为具有真实的函数类型析构函数很重要(这使得实现std::vector
之类的东西变得更加容易(,但是基元类型不拥有任何资源,因此销毁它们是没有操作的。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 内联映射初始化的动态atexit析构函数崩溃
- 什么时候调用析构函数
- 优先顺序:智能指针和类析构函数
- C++-明确何时以及如何调用析构函数
- 使用基类指针创建对象时,缺少派生类析构函数
- 在c++中使用向量时,如何调用构造函数和析构函数
- 重载运算符new[]的行为取决于析构函数
- 我需要知道编译器如何在cpp中使用析构函数
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 析构函数调用
- 用于自动存储的析构函数
- 我可以解决unique_ptr在<MyType>仅存储 nullptr 时不需要 MyType 析构函数定义吗?
- C++联合如何知道其中存储的类型以及要调用哪个析构函数
- 为什么标准允许我在没有析构函数的情况下自由存储分配类
- 当存储在std::vector属性中时,我可以删除析构函数中的指针吗
- 是否应将析构函数包含在使用自动存储的指针中
- 是接口所需的虚析构函数,如果总是将其存储在shared_ptr中
- std::list 的擦除成员函数是否为所有存储的元素调用析构函数?