在使用new与delete时,有哪些注意事项需要我们牢记,以避免潜在的风险和错误?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1632个文字,预计阅读时间需要7分钟。
C++的动态内存管理通过new和delete操作实现,即用new申请空间,用delete释放空间。使用new和delete时,需注意以下原则:
1. new与delete一一对应
2.使用new操作申请空间
3.如果申请失败,new会抛出异常
C++的动态内存管理是通过new和delete两个操作来完成的,即用new来申请空间,用delete来释放空间。在使用new和delete时,注意以下原则。
1.new与delete需一一对应
用new操作申请空间,如果申请成功,必须在以后的某个时刻用delete释放该空间,既不能忘记释放,也不能多次释放。前者会引起内存泄露,后者会引起运行时错误。如下面的程序。
#include <iostream> using namespace std; int main() { int *p; p=new int(3); if(p) { delete p; } delete p; return 0; }
以上程序对指针p所指向的空间进行两次释放,这种内存错误对C++程序危害极大,也是很多人对C++忘而却步的原因。多次释放同一块内存空间,并不一定立即引起程序运行错误,也不一定会导致程序运行的崩溃,这跟具体的编译器实现有关。但是,多次释放同一块内存空间绝对是一个编程错误,这个编程错误可能会在其后的某个时刻导致其他的逻辑错误的发生,从而给程序的调试和纠错带来困难。考察如下程序。
本文共计1632个文字,预计阅读时间需要7分钟。
C++的动态内存管理通过new和delete操作实现,即用new申请空间,用delete释放空间。使用new和delete时,需注意以下原则:
1. new与delete一一对应
2.使用new操作申请空间
3.如果申请失败,new会抛出异常
C++的动态内存管理是通过new和delete两个操作来完成的,即用new来申请空间,用delete来释放空间。在使用new和delete时,注意以下原则。
1.new与delete需一一对应
用new操作申请空间,如果申请成功,必须在以后的某个时刻用delete释放该空间,既不能忘记释放,也不能多次释放。前者会引起内存泄露,后者会引起运行时错误。如下面的程序。
#include <iostream> using namespace std; int main() { int *p; p=new int(3); if(p) { delete p; } delete p; return 0; }
以上程序对指针p所指向的空间进行两次释放,这种内存错误对C++程序危害极大,也是很多人对C++忘而却步的原因。多次释放同一块内存空间,并不一定立即引起程序运行错误,也不一定会导致程序运行的崩溃,这跟具体的编译器实现有关。但是,多次释放同一块内存空间绝对是一个编程错误,这个编程错误可能会在其后的某个时刻导致其他的逻辑错误的发生,从而给程序的调试和纠错带来困难。考察如下程序。

