为了账号安全,请及时绑定邮箱和手机立即绑定

大家为什么都不用析构函数啊~Coordinate()?不过它好像没有运行??求好心人解答 ^_^

#include <iostream>
#include<stdlib.h>

using namespace std;

class Coordinate
{   
public:
	Coordinate()
	{
		cout<<"Coordinate()"<<endl;
	}

	~Coordinate()
	{
		cout<<"~Coordinate()"<<endl;
	}
                                            	// 打印坐标的函数
	void printInfo() 
	{
	   cout<<"("<<m_iX<<","<<m_iY<<")"<<endl;
	}
public:
	int m_iX;
	int m_iY;
};

int main(void)
{
	 //定义对象数组
	Coordinate coorArr[2];           //  这个【2】表示数组一共有2个元素
	coorArr[0].m_iX=1;         
	coorArr[0].m_iY=2;                //这个【0】表示第0个元素
	coorArr[1].m_iX=3;
	coorArr[1].m_iY=4;
    //遍历数组,打印对象信息
	for(int i = 0; i < 2; i++)
	{
		coorArr[i].printInfo();
	}	

 //  delete []coorArr;
 //  coorArr=NULL;
	system("pause");
	return 0;
}

//定义具有2个对象的Coordinate数组,遍历对象数组,打印对象信息如:(1,2)(3,4)


正在回答

1 回答

如果没有自定义析构函数,系统会自动生成一个默认的析构函数,在删除对象时运行。

它并不是没有运行,你是在栈上定义的对象,所以在整段程序结束时系统再会调用析构函数,你只是没有看到而已(此时程序还没运行完),如果用在堆上定义,在释放内存时会看到调用的。

0 回复 有任何疑惑可以回复我~
#1

装着指南针的小马达 提问者

谢谢哈!不过“在整段程序结束时系统再会调用析构函数”程序都结束了,它怎么还能调用我的析构函数?还是调用系统自己生成的析构函数?
2016-02-04 回复 有任何疑惑可以回复我~
#2

慕前端4039174 回复 装着指南针的小马达 提问者

不用谢,更准确的说析构函数的调用是在对象的作用域最后。对这段程序,就是main函数的最后一步(程序末尾)调用析构函数,在释放对象内存后,程序才真正结束。
2016-02-04 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之封装篇(下)
  • 参与学习       70919    人
  • 解答问题       514    个

封装--面向对象三大特征之一,通过案例让C++所学知识融会贯通

进入课程

大家为什么都不用析构函数啊~Coordinate()?不过它好像没有运行??求好心人解答 ^_^

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信