所以我有创建PiggyBank对象的代码。根据选择,有三个if语句。由于关键字new在堆中分配对象,我应该如何正确管理内存垃圾,因此,当创建其他类型的构造函数时,旧的存钱罐将消失,在以下代码中:
while(fChoice!=""){
showFunctions();
PiggyBank *pb;
cin>>fChoice;
cin.ignore(numeric_limits<streamsize>::max(),'\n');
if(fChoice=="a") {
pb = new PiggyBank();
}
else if (fChoice=="b"){
cout<<"ENTER NAME:"<<endl;
string name = "";
cin>>name;
pb = new PiggyBank(name);
}
else if (fChoice=="c") {
cout<<"ENTER NAME:"<<endl;
string name = "";
cin>>name;
cout<<"ENTER STARTING BALANCE:"<<endl;
int startBalance = 0;
cin>>startBalance;
pb = new PiggyBank(name,startBalance);
}
}
首先不要使用动态内存分配。这里没有明显的原因:
while(fChoice!=""){
showFunctions();
PiggyBank pb;
cin>>fChoice;
cin.ignore(numeric_limits<streamsize>::max(),'\n');
if(fChoice=="a") {
pb = PiggyBank();
}
else if (fChoice=="b"){
cout<<"ENTER NAME:"<<endl;
string name = "";
cin>>name;
pb = PiggyBank(name);
}
else if (fChoice=="c") {
cout<<"ENTER NAME:"<<endl;
string name = "";
cin>>name;
cout<<"ENTER STARTING BALANCE:"<<endl;
int startBalance = 0;
cin>>startBalance;
pb = PiggyBank(name,startBalance);
}
}
(当然,这里PiggyBank
的定义有些依赖性)
如果您需要动态分配,请使用std::unique_ptr
为您自动处理删除:
while(fChoice!=""){
showFunctions();
std::unique_ptr<PiggyBank> pb;
cin>>fChoice;
cin.ignore(numeric_limits<streamsize>::max(),'\n');
if(fChoice=="a") {
pb = new PiggyBank();
}
else if (fChoice=="b"){
cout<<"ENTER NAME:"<<endl;
string name = "";
cin>>name;
pb = new PiggyBank(name);
}
else if (fChoice=="c") {
cout<<"ENTER NAME:"<<endl;
string name = "";
cin>>name;
cout<<"ENTER STARTING BALANCE:"<<endl;
int startBalance = 0;
cin>>startBalance;
pb = new PiggyBank(name,startBalance);
}
}