c++临时对象与空指针导致clion debugger无法运行的bug
#include <iostream>
#include "savings.h"
#include "checking.h"
using namespace std;
int main()
{
string acntName;
float saveNum;
while(acntName != "x" || saveNum != 0)
{
cout << "请输入账户名:"<<endl;
cin>>acntName;
cout << "请输入存款额" <<endl;
cin>>saveNum;
if(acntName == "x" && saveNum == 0)
{
break;
}
else if(acntName[0] == 'c')
{
new Checking(acntName,saveNum); //这里如果不用堆区,创建临时对象Checking(acntName,saveNum); 则下一个循环会释放这个临时对象,然后创建的对象链表其中指针会指向未知空间,也就会导致空指针问题,使clion的debugger无法正常运行,故应该采用堆区来创建对象
}
else if(acntName[0] == 's')
{
new Savings(acntName,saveNum); //堆区申请空间创建的对象会被析构函数自动释放其空间,只有在对象内部利用堆区空间并且用父类指针或引用指向子类对象时,才需要用虚析构来析构子类对象
}
else
{
cout<<"输入账户不合规,请重新输入"<<endl;
continue;
}
}
Account * p;
p = Account::First();
while(p != nullptr)
{
p->Display();
p = p->Next();
}
return 0;
}
如上