【发布时间】:2019-03-27 21:45:34
【问题描述】:
我正在阅读一些东西,并遇到了这个:
当变量超出范围时调用析构函数
所以我的问题是没有析构函数的变量会发生什么?
举个例子:
class A {
public:
A () { }
};
void foo () {
A a;
}
int main (void) {
foo();
}
所以在这种情况下是a()?分配给a 的内存在foo() 完成后是否被销毁?
比我有这个例子:
class A {
std::vector <int> aa;
public:
A () : aa(5) { }
};
void foo () {
A b;
}
int main (void) {
foo();
}
在这种情况下,分配给b 的内存在foo() 完成后是否也被销毁?
再澄清一点,我知道:
class A {
public:
A () { }
};
等价于
class A {
public:
A () { }
inline ~A() = default;
};
但我的问题是,当foo() 完成时是否调用了这个内联破坏?
编辑:
inline 析构函数是什么时候添加的?
【问题讨论】:
-
A a();-- 这不会创建对象。这声明了一个名为a()的函数,它不接受任何参数并返回一个A对象。 -
@Gox 在
main()中对foo();的调用可能会被任何体面的 c++ 编译器优化掉,因为该函数没有任何效果。 -
旁注:析构函数不会释放被销毁对象的内存。它最常被称为释放内存的链的一部分,但可以单独调用以在不释放内存的情况下销毁对象。有关更多信息,请参阅Placement new/delete。
标签: c++ memory memory-leaks