如何处理堆内存垃圾?
How to handle the heap memory garbage?
所以我有这段代码,其中创建了一个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);
}
}
(需要#include<memory>
(
相关文章:
- 开放 CV 中的动态内存分配,用于视频处理
- 在C++中释放内存期间,迭代器与指针有何不同
- 是否可以通过每次在内存中仅保存一个平铺来处理完整的平铺 tiff 图像?
- 如何处理堆内存垃圾?
- 如何处理以下代码中的内存分配错误
- 将使用 4 或 8 个对齐规则将加载处理到内存中
- 错误 在测试.exe 0x76C9FD62时出现未经处理的异常:Microsoft C++异常:内存位置0x006FF8
- 无论代码长度如何,以下代码的内存要求有何不同?
- 当有大量内存分配时,如何处理C++编程中的异常
- C++ 友元函数在内存位置上有何不同?
- 在 cplex c++ 音乐会 api++ 中处理非常大的问题而不会耗尽内存
- 如何在处理C++字符串时使用内存集
- QT-如何处理对话框的内存管理
- 通过函数来处理内存 - 这是正确的
- 如何在Qt中处理子类中的动态内存分配
- 如何在将指针传递给库函数时处理内存管理
- 在本机 Android 应用中处理内存不足
- 嵌套的 QVector 指针内存处理
- 头文件是否会影响程序的内存或处理速度
- 内存和处理效率高的多维数据结构C++