首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

动态内存分配中new是否一定要与delete搭配

2013-07-04 
动态内存分配中new是不是一定要与delete搭配?如下面的程序,未出现delete,那动态内存分配会在最后的}处终止

动态内存分配中new是不是一定要与delete搭配?
如下面的程序,未出现delete,那动态内存分配会在最后的}处终止,这算不算有错误?
#include <iostream.h>
#include <string.h>
class StudentID{                                          //学号类
public:
  StudentID(int id=0)
  { value=id;
    cout <<"Assigning student id " <<value <<endl;  }
  ~StudentID( )
  {    cout <<"Destructing id " <<value <<endl;  }
private:
  int value;                                        //学号
};

class Student{
public:
Student(char* pName="noName",int ssID=0):id(ssID)
  { cout <<"Constructing student " <<pName <<endl;
    name=new char[strlen(pName)+1];
strcpy(name,pName);  }
protected:
   char *name;
   StudentID  id;
};
int  main()
{
    Student  p;
Student s("Randy",9818);   }
动态内存分配 new delete
[解决办法]
单就这一程序来说,也可以算是一种可行的思路。
但就class Student来说,就是一种错误。
考虑另一个程序要使用你的Student类,每次从数据库中读取上千条数据,生成上千个Student对象,输出到表格中,然后将它们释放掉;下次查询时又创建上千个对象……

[解决办法]
http://baike.baidu.com/view/4794.htm#2

此时至少要遵循以下原则:
(1)new和delete是成对出现的。只出现一个是错误的或不规范的写法,即使能编译通过,也会有安全隐患;
(2)使用的new与delete要相同。也就是说如果你在 new表达式中使用了 [],你必须在对应的 delete 表达式中使用 []。如果你在 new 表达式中没有使用 [],你也不必在对应的 delete 表达式中不使用 []。
(3)对一个指针只能使用一次运算符delete;
[解决办法]
有new一定要有delete(palacement new除外)

[解决办法]
new和delete肯定会成对出现
[解决办法]
首先,如果你的程序结束了,系统会把这些动态内存释放掉。
其次,new 和 delete 最好是成对出现,而且,谁new,尽量让谁delete。这是设计原则之一。
[解决办法]
拉屎以完后一定要擦屁股。嗯

热点排行