有必要在释放内存时使用IF语句吗?
Is it necessary to use IF statement when releasing memory?
我正在努力理解c++中的内存部分。我试图通过使用下面的代码生成输出后释放内存。
问题:
有必要使用if语句释放内存吗?
代码:
int main(){
char *pc;
int *pi;
pc = new char('a');
pi = new int(8);
cout << *pc << endl;
cout << *pi << endl;
//What's the purpose for doing if(pc) and if (pi) below?
if(pc){
delete pc;
}
if(pi){
delete pi;
}
return 0;
}
我可以这样做吗?int main () {char *电脑;int *π;
pc = new char('a');
pi = new int(8);
cout << *pc << endl;
cout << *pi << endl;
delete pc;
delete pi;
return 0;
}
释放内存时是否需要使用IF语句?
不,它不是(只要您没有覆盖全局operator delete
)。这很好,不会做任何事情:
int* p = nullptr;
delete p;
c++ 11标准第3.7.4/2段:
[…的值提供给释放函数的第一个参数可以是空指针值;,如果是,如果释放函数是标准库中提供的函数,则调用不起作用。[…]
正如chris在评论中建议的那样,考虑使用智能指针,而不是通过原始指针、new
和delete
(或它们的数组对应物)执行手动内存管理。
在您的特定代码中,不需要null检查。
一般来说,delete (T*)0;
是否调用类型T
的释放函数是具体实现的。如果你的实现将空指针传递给释放函数,或者你的类型通过提供成员operator delete
覆盖了释放函数,或者你提供了一个替代的全局::operator delete
,而那个自定义的释放函数不能很好地处理空指针值,你可能会遇到麻烦。
标准不要求自定义operator delete
在传递空指针时不做任何事情。它不应该失败,但它可能会写令人讨厌的日志消息或告诉你的老板有人没有遵循编码标准,例如
不,它不是,但它被认为是一个很好的做法。在现实生活中,由于业务需求、bug等原因,您的代码经常发生变化,因此最好使用这种防御性编程策略。
您最不想要的是由于您的同事更改了代码的上部
相关文章:
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 以在Qt中的IF语句中设置时间延迟
- Craps游戏问题,忽略if语句
- c++:定义if语句中的模板
- C++嵌套的 If 语句中,它无法按预期工作
- 如果条件不相关,我应该更喜欢两个 if 语句而不是 if-else 语句吗?
- 需要有关此 if 语句的帮助
- 转换器练习:跳过 if 语句和 if 语句
- 避免在 C++ 中的 if 语句中递增
- 如果仍然不满足要求,如何使 if 语句重复?
- do while 循环中的 if 语句以 yes 或 no 结尾
- 为什么在此C++代码中触发此 if 语句?
- 如何基于平台在制作文件中制作if语句?
- 在 if 语句中使用 GetKeyState 时,它会跳过条件
- C++ If 语句,从其他语句重复