三生石旁相见
2015-11-24 11:12
为什么我编译的时候析构了6次啊
# include <iostream>
using namespace std;
class Coordinate
{
public:
Coordinate(){cout << "Coordinate()" << endl;}
~Coordinate(){cout << "~Coordinate()" << endl;}
int m_iX;
int m_iY;
};
int main()
{
Coordinate coor[3];
coor[0].m_iX = 3;
coor[0].m_iY = 5;
Coordinate * p = new Coordinate[3];
p -> m_iX = 7;
p[0].m_iY = 9;
p++; //
p -> m_iX = 11;
p[0].m_iY = 13;
p[1].m_iX = 15;
p++;
p -> m_iY = 17;
for(int i=0;i<3;i++)
{
cout << "coor_x = " << coor[i].m_iX << endl;
cout << "coor_y = " << coor[i].m_iY << endl;
}
for(int j=0;j<3;j++)
{
cout << "p_x = " << p -> m_iX << endl;
cout << "p_y = " << p -> m_iY << endl;
p--;
}
p++;
delete []p;
p = NULL;
return 0;
}
你是不是编译器不一样,codeblock和VC6.0执行结束后会自动暂停,而老师用的是VC2010不会自动暂停,所以在return 0前面加了个system(“pause”)来实现程序暂停,但老师在暂停后显示的析构函数是从栈中执行手动释放的对象数组的析构函数,还有从堆中申请对象数组需要在暂停结束后的return 0处被自动销毁,而老师的编译器无法显示出来。
把完整的代码列出来,发帖时注意用格式化工具
C++远征之封装篇(下)
70915 学习 · 514 问题