【发布时间】:2018-12-11 02:29:17
【问题描述】:
隐式定义的析构函数有什么作用?它只是一个由编译器定义的空函数吗?
struct Foo
{
int i;
};
struct Bar
{
int i;
~Bar()
{
// empty...
}
};
Foo的销毁和Bar一样吗?还是隐式析构函数在编译器生成的主体内部做了什么?
【问题讨论】:
标签: c++ destructor object-lifetime
隐式定义的析构函数有什么作用?它只是一个由编译器定义的空函数吗?
struct Foo
{
int i;
};
struct Bar
{
int i;
~Bar()
{
// empty...
}
};
Foo的销毁和Bar一样吗?还是隐式析构函数在编译器生成的主体内部做了什么?
【问题讨论】:
标签: c++ destructor object-lifetime
隐式定义的析构函数有什么作用?
它与显式定义的具有空主体的析构函数相同。实际上,它会销毁所有子对象,并且什么也不做。
它只是一个由编译器定义的空函数吗?
实际上,甚至可能不需要一个空函数。但是,在用抽象机器进行思考时,认为存在可能会很有用。
或者隐式析构函数在编译器生成的主体内部做些什么?
取决于班级。对于Foo,析构函数不需要做任何事情。
【讨论】:
Bar 的析构函数并不重要,因为它是用户定义的,即使它是空的。从技术上讲,必须用delete 销毁Bar,而Foo 的内存可以简单地解除分配,即使Bar 的析构函数也不做任何事情。还有什么?