析构数量不对啊

来源:2-3 [C++]对象数组实践(二)

三生石旁相见

2015-11-24 11:12

为什么我编译的时候析构了6次啊


写回答 关注

3回答

  • 再吃一个苹果_
    2016-09-24 12:01:17

    # 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;

    }


    面具VS口罩 回复再吃一个苹果...

    加一个system("pause");就会显示3次

    2017-03-22 22:02:52

    共 2 条回复 >

  • 黑色梦幻100
    2016-01-13 18:26:39

    你是不是编译器不一样,codeblock和VC6.0执行结束后会自动暂停,而老师用的是VC2010不会自动暂停,所以在return 0前面加了个system(“pause”)来实现程序暂停,但老师在暂停后显示的析构函数是从栈中执行手动释放的对象数组的析构函数,还有从堆中申请对象数组需要在暂停结束后的return 0处被自动销毁,而老师的编译器无法显示出来。

  • onemoo
    2015-11-24 23:35:27

    把完整的代码列出来,发帖时注意用格式化工具

C++远征之封装篇(下)

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

70915 学习 · 514 问题

查看课程