1、new和delete都会用,这里只声明一点:
C++ 没有明确定义如何释放指向不是用 new 分配的内存地址的指针。
比如下面的代码:
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 }
对于p0,编译器无法断定其是一个指向什么类型的指针,因此尽管这个语句是错误的,但是大部分编译器都能编译通过,运行时会出错。
对于p1,指向初始化后的0值,对其作delete操作是可合法的
对于p2,指针的值为0,对其作delete操作是可合法的,但是没有意义,因为C++保证:删除0值的指针是安全的。
2、对于动态内存分配,如果和容器结合起来,需要注意的是:如果指针指向动态分配生成的指针,那么delete这个指针也是不可以的
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 }
[008]new、delete及动态内存分配,布布扣,bubuko.com
原文:http://www.cnblogs.com/hustcser/p/3638125.html