我对于类析构和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?
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?
解决方案 »
- 窗口左键单击才能接收到键盘消息
- 程序先前可以利用图像控件加载位图,随着程序的运行,位图无法加载了,怎么回事?如何解决?
- VC2005 CDialog -> 属性 -> 外观 -> Transparent 问题
- 【请教】Unicode的DLL和Multi Byte的DLL内存空间上区别在哪里?
- server 2003上开发iocp服务器,奇怪的问题!客户端send返回错误10054!
- 好久还没有解决的一个解析xml的问题。
- VC8编出的程序在有的机器上不能运行
- 一个关于使用_ConnectPtr访问数据库的问题
- 学vc快两个月了,感觉到长进不大,好郁闷啊。
- 为什么C++中的模板类的定义和实现要在同一文件中,不然在连接时会出错
- 对10个串口以上的编程,VC++支持吗?
- 急急急!!!哪位有没有VC下的 ping 函数?帮帮忙,另加100分!!!
new/delete
new[]/delete[]
但调试结果没提示,不怎么回事
有几个new就应该有几个delete
delete t应该放在while循环里面
t = new Account(accNo,balan);
后面
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;
}
}
}
new;delete没有
在VC调试环境中Console程序VC不会显示内存泄漏信息的
不然的话,肯定会产生泄漏的.
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();
void Account::Clear()
{
do
{
delete pFirst;
}while((pFirst=pFirst->next) != 0)
}