注册 登录
编程论坛 C++教室

【求助】为什么析构两次不报错??

TND 发布于 2009-11-07 21:27, 563 次点击
//cat类
#include <iostream>
using namespace std;
class cat
{private:
    static int howmanycat;
public:
    cat(){cout<<"构造\n";howmanycat++;}
    static void gethowmanycat(){cout<<howmanycat<<endl;}
    ~cat(){cout<<"析构\n";--howmanycat;}
};
int cat::howmanycat=0;
void main()
{
    int n;
    cout<<"n=";
    cin>>n;
    cat *p;
    p=new cat[n];
    for(int i=0;i<n;i++)
    {
        (p+i)->gethowmanycat();
         (p+i)->~cat();
    }
    delete [] p;
}
2 回复
#2
东海一鱼2009-11-07 23:07
因为你自己设计的这个类在析构函数中并没有判断并释放在动态内存中创建对象所分配的空间。换句话说,如果没有后期的程序员手工释放delete [] p这个动作。该对象数组将一直存在。直到程序结束。
#3
TND2009-11-08 10:27
那么他是怎么真正的析构对象的??是delete 吗?这样的话,有了delete,那么析构函数就多余了吗?
1