new/ delete 的使用(仅限于c++,注意,new、delete不是函数而是操作符!注意与c中的malloc和free区分)编程的时候经常要用到堆内存的分配,通常使用的操作符是new,这个时候就必然要用到delete去释放申请的内存空间。
此时至少要遵循以下原则:
(1)new和delete是成对出现的。只出现一个是错误的或不规范的写法,即使能编译通过,也会有安全隐患;
(2)使用的new与delete要相同。也就是说如果你在 new表达式中使用了 [],你必须在对应的 delete 表达式中使用 []。 如果你在 new 表达式中没有使用 [],你也不必在对应的 delete 表达式中使用 []。
(3)对一个指针只能使用一次运算符delete;
例:
printf("-------- 使用 new/ delete 情况 ---------------\n");
string *p1=new string("123");//p1申请了一个空间
printf("<%s>\n", p1->c_str());
delete p1;//释放的时候释放一个就可以了
printf("-------- 使用 new[] / delete[] 的情况 ---------------\n");
int i;
string* p2 = new string[5];//p2申请了一组空间
for ( i=0; i< 5; i++ )
{
p2[i].assign("123");
}
for( i=0; i< 5; i++ )
{
printf("%d:%s\n", i, p2[i].c_str());
}
delete [] p2;//当然要释放一组了
时间: 2024-12-19 10:16:28