【发布时间】:2015-08-22 19:52:43
【问题描述】:
我是 C++ 新手。我写了下面的代码来理解构造函数和析构函数在 C++ 中是如何工作的。
#include<iostream>
using namespace std;
class Line
{
private:
Line();
public:
int length;
static void getInstance(Line* objLine);
~Line();
};
void Line::getInstance(Line* objLine)
{
if(objLine == NULL)
{
objLine = new Line();
}
}
Line::Line()
{
cout<<"In the Constructor"<<endl;
}
Line::~Line()
{
cout<<"In the Destructor"<<endl;
}
int main()
{
Line* objLine = NULL;
Line::getInstance(objLine);
return 0;
}
我读过当对象超出范围时调用类的析构函数。在上面的代码中,对象由局部变量 objLine 处理。所以在主要的结束时,我预计会调用析构函数。但它永远不会被调用。任何人请告诉我在上述情况下何时调用析构函数
【问题讨论】:
-
objLine在main结束时超出范围,但objLine不是Line的实例,它只是一个指针。因此,main末尾的指针超出范围。它没有析构函数。如果您改为编写Line objLine,则析构函数将在objLine超出范围时执行。 -
对于超出教育范围的软件,我建议使用共享指针,当变量超出范围时,它会调用析构函数。