为标量类型显式定义析构函数
Explicitly defined destructor for scalar type
如果我们编写下面的代码,它可以正常工作。
typedef int I;
I i;
int main()
{
i.~I();
}
我知道析构函数是特殊的成员函数(标准中有定义)。但是,是否有一种方法可以显式定义调用伪析构函数时将调用的函数?目前还不清楚为什么允许对这些类型进行伪析构函数调用。
不,标准规定伪析构函数调用是无操作的。(更准确地说,唯一的影响是对.
或->
之前的表达式求值。)
允许伪析构函数调用的原因是,这样您就可以编写可以调用析构函数的模板代码,而不必费心显式检查类型是否为类。
附录:然而,您可以定义一个自定义分配器,它的destroy
函数做一些额外的事情,而不仅仅是销毁对象,所以您可以使它不是int
的无操作。请注意,接受allocator参数的标准库容器将始终使用该allocator来销毁对象,而不是直接对它们调用~T()
。
相关文章:
- 添加自定义析构函数时,Move 构造函数在派生类中消失
- 在从仅移动类型派生的类中定义析构函数在使用 std::vector emplace_back或push_back创建时会
- 为什么在定义析构函数时隐式删除移动构造函数
- 仅在删除包含对象的向量时调用自定义»析构函数«
- 这个递归类需要一个自定义析构函数?
- C++ - 定义自定义析构函数时程序崩溃
- 定义析构函数可以防止成员函数内联
- 使用自定义析构函数时出现"Undefined reference"错误
- C++ 在迭代器类中定义析构函数
- `不可复制`与自定义析构函数
- 是否可以使用 std::shared_ptr 创建共享对象池,并在没有自定义析构函数的情况下创建weak_ptr
- 我们什么时候必须在派生类 c++ 中定义析构函数
- 为什么当定义析构函数时,编译器不再添加默认的move函数和赋值函数
- 为标量类型显式定义析构函数
- 提供(空的)用户定义析构函数会导致编译错误
- 为什么带有用户定义析构函数的类的实例将成员指针设置为零
- 如何正确定义析构函数
- 带有Placement New的自定义析构函数
- 什么时候需要定义析构函数?
- 是否可以重新定义析构函数