首页 > 其他 > 详细

[008]new、delete及动态内存分配

时间:2014-04-02 10:41:01      阅读:438      评论:0      收藏:0      [点我收藏+]

1、new和delete都会用,这里只声明一点:

C++ 没有明确定义如何释放指向不是用 new 分配的内存地址的指针。

比如下面的代码:

bubuko.com,布布扣
 1 #include<iostream>
 2 
 3 using namespace std;
 4 
 5 int main() {
 6     int i = 1;
 7     int *p0 = &i;
 8     int *p1 = new int();
 9     int *p2 = 0;
10 
11     delete p0;    // Compile OK, Run Error
12     delete p1;    // Compile OK, Run OK
13     delete p2;    // Compile OK, Run OK, No meaning
14 
15     return 0;
16 }
bubuko.com,布布扣

对于p0,编译器无法断定其是一个指向什么类型的指针,因此尽管这个语句是错误的,但是大部分编译器都能编译通过,运行时会出错。

对于p1,指向初始化后的0值,对其作delete操作是可合法的

对于p2,指针的值为0,对其作delete操作是可合法的,但是没有意义,因为C++保证:删除0值的指针是安全的。

2、对于动态内存分配,如果和容器结合起来,需要注意的是:如果指针指向动态分配生成的指针,那么delete这个指针也是不可以的

bubuko.com,布布扣
 1 #include<iostream>
 2 #include<vector>
 3 #include<string>
 4 
 5 using namespace std;
 6 
 7 int main() {
 8     vector<string> svec(10, "hello World");  
 9     vector<string> *pvec1 = new vector<string>(10);   
10     vector<string> *pv1 = &svec;  
11     vector<string> *pv2 = pvec1;  
12              
13     cout << svec[0] << endl;
14     cout << (*pvec1)[0] << endl;   // 要特别注意*pvec1的括号
15     cout << (*pv1)[0] << endl;
16     cout << (*pv2)[0] << endl;
17 
18     delete pvec1;
19     delete pv1;                    // Compile OK, Run Error
20     delete pv2;                    // Compile OK, Run Error
21 }
bubuko.com,布布扣

[008]new、delete及动态内存分配,布布扣,bubuko.com

[008]new、delete及动态内存分配

原文:http://www.cnblogs.com/hustcser/p/3638125.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!