Mat*_*ian 5 c++ constructor destructor
输入:
#include <iostream>
using namespace std;
class SimpleClass
{
public:
SimpleClass()
{
cout<<"SimpleClass Constructor\n";
}
virtual ~SimpleClass()
{
cout<<"SimpleClass destructor\n";
}
};
int main()
{
SimpleClass a;
SimpleClass lol = a;
SimpleClass b;
SimpleClass * lol2 = &b;
}
Run Code Online (Sandbox Code Playgroud)
输出:
SimpleClass Constructor
SimpleClass Constructor
SimpleClass destructor
SimpleClass destructor
SimpleClass destructor
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么析构函数被调用3次.
lol*_*ndo 11
析构函数被调用三次,a,lol和b.
在你的情况下,a并b使用default constructor.实例化.但是要注意lol使用的是实例化的copy constructor
因为正好创建了3个SimpleClass类的对象,但是你的构造函数只被调用了2次:
a,调用你的构造函数; lol,它是由从复制初始化一个经由隐式定义的复制构造 (因而绕过你的构造);b,调用你的构造函数.请注意,这lol2只是一个指向b的指针,因此不会进行额外的调用.
正确的名称是"析构函数",而不是"解构函数";)