【发布时间】:2019-11-26 22:53:51
【问题描述】:
所以我有这段代码,其中创建了 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循环之后使用pb。如果是这样,那么pb的声明属于while之前。就像现在一样,pb在while迭代结束时超出范围,将无法用于任何事情。 -
并非如此。这是一个学校项目,老师不喜欢语言的新特性。应该是老办法。
-
@uneven_mark 但 new 关键字是否也在堆中为其创建内存?因此,即使在 while 循环结束后它也应该保持不变,否则我弄错了?
-
@Fiphe 正如 user4581301 在我的回答中指出的那样,如果你得到错误的值,你很可能违反了课堂上的 rule of 0/3/5。您需要始终遵守该规则。