【发布时间】:2020-09-06 12:07:25
【问题描述】:
让我们看看这段代码。为什么调用的析构函数的数量比构造函数的多?
#include <iostream>
using namespace std;
class B{
public:
B(){
cout << "constructor of B\n";
}
~B(){
cout << "destructor of B\n";
}
};
void func(B obj){
}
int main(){
B obj;
func(obj);
}
输出是
constructor of B
destructor of B
destructor of B
不明白为什么调用的析构函数的数量和调用的构造函数的数量不一样?
【问题讨论】:
-
您没有跟踪复制构造函数的数量。如果您打印出
this的值以及这些消息,您会发现缺少某些内容。 -
如果您使用
gdb调试程序,当您进入func(obj);时,您将看到一个您从未声明被调用的函数:B::B(const B&)。见implicitly defined copy-constructor -
规则 0:每个构造函数调用都匹配一个析构函数调用,每一个析构函数调用匹配一个构造函数调用。 (除非你使用
new和delete并搞砸了)
标签: c++ oop constructor destructor