我对于类析构和Delete的应用比较模糊。请大家教教我!比如:
class Account
{
public:
virtual void Withdrawal(float amount);
Account(unsigned accNo, float balan=0.0);
protected:
static Account *pFirst;
Account *pNext;
static int count;
unsigned acntNumber;
float balance;
};Account *Account::pFirst = 0;
int Account::count = 0;Account::Account(unsigned accNo, float balan)
{
acntNumber = accNo;
balance = balan;
pNext = 0;
count++;
pNext = pFirst;
pFirst = this;
}void main(int argc, char* argv[])
{
int accNo;
float balan;
Account *t,*p;//Account 是一个类
do{
cout<<"Account:";
cin>>accNo;
cout<<"Balance";
cin>>balan;
t = new Account(accNo,balan);
} while(balan != 0);

delete t;//此句话需要不需要
}这个程序存在不存在内存未释放?最后一句话需要不需要?还需要不需要添加一个析构函数来析构这个链表?
是不是每一个New必须有一个对应一个Delete?

解决方案 »

  1.   

    malloc/free
    new/delete
    new[]/delete[]
      

  2.   

    如果你不增加一个析构,delete t;只释放了最后一个Account,所以存在内存泄漏,增加一个析构释放列表,另外注意不要将自己释放两次就行了,另外你的这个程序会不会死循环?
      

  3.   

    Sorry,看错了。 不会死循环:)如果你不增加一个析构,delete t;只释放了最后一个Account,所以存在内存泄漏,增加一个析构释放列表,另外注意不要将自己释放两次就行了.
      

  4.   

    理论上是会内存泄漏的
    但调试结果没提示,不怎么回事
    有几个new就应该有几个delete
    delete t应该放在while循环里面
    t = new Account(accNo,balan);
    后面
      

  5.   

    在VC调试环境中Console程序VC会显示内存泄漏信息吗?我记得是不会,所以看不到。
      

  6.   

    我增加在类中增加了一个析构函数,但好像根本没有进去过?知道是怎么回事?
    Account::~Account()
    {
    Account *p;
    p = pFirst;
    cout<<acntNumber<<endl;
    if (p == this)
    {
    delete p;
    pFirst = 0;
    }
    else
    {
    for(p;p->Next()!= this; p=p->Next())
    {
    p->pNext = this->pNext;
    p = this;
    delete p;
    break;
    }
    }
    }
      

  7.   

    malloc(); free()有括号
    new;delete没有
    在VC调试环境中Console程序VC不会显示内存泄漏信息的
      

  8.   

    你的内存是在void main(int argc, char* argv[]){}中new出来的,为类增加析构函数并不能释放.你需要在main中释放内存.
    不然的话,肯定会产生泄漏的.
      

  9.   

    do{
    cout<<"Account:";
    cin>>accNo;
    cout<<"Balance";
    cin>>balan;
    t = new Account(accNo,balan);//  加上list.AddTail(t);
    } while(balan != 0);

    // delete t;//此句话需要不需要while(!list.IsEmpty()) delete list.GetHead();
      

  10.   

    new 出来的指针看你没存储啊,应该放到链表里面存起来,然后方便删除。
      

  11.   

    向你这样的结构必须为类增加一个静态函数static void Clear()来释放内存
    void Account::Clear()
    {
      do
       {
         delete pFirst;
       }while((pFirst=pFirst->next) != 0)
    }