C++析构函数只声明而不定义的问题
现附上一个简单的小例子(计算圆柱体体积)
#include<iostream>
using namespace std;
//计算圆柱体体积
class cylinder//圆柱体
{
public:
double r;
double h;
double volume;
cylinder();
~cylinder();
double * calculate(cylinder *);
double getindex();
};
cylinder::cylinder()//构造函数
{
cout << "请输入圆柱体的高:";
cin >> r;
}
double cylinder::getindex()
{
return r;
}
int main() {
cylinder a;
cout <<a.getindex()<<endl;
system("pause");
return 0;
}
在这个案例中,类cylinder中声明了析构函数~cylinder,却没有在后面给出析构函数的定义,从而导致程序报错
如何修改错误呢?
大家只需要把析构函数的声明去掉就可以了!
给大家解释一下:
- 构造函数主要是在对象创建时,给对象中的一些数据成员赋值,主要目的就是来初始化对象。
- 析构函数的功能是用来释放一个对象的,在对象删除前,用它来做一些清理工作,与构造函数正好相反。即:对象销毁前调用析构函数。
- 如果程序员没有定义析构函数,那么析构函数是程序默认生成的。
- 如果程序员在类中声明了析构函数,那么程序就不会自动生成默认的析构函数,此时如果程序员不写析构函数的定义,那么析构函数就为空!无法释放对象,从而导致程序报错。
大家可以参考这篇博客:C++构造函数、析构函数、复制(拷贝)构造函数的注意点