动态内存分配中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。这是设计原则之一。
[解决办法]
拉屎以完后一定要擦屁股。嗯