这段代码不是我写的!在类WebServer中,我们重载+ =运算符.该类使用动态分配的WebPage类型的对象数组(另一个类,组合)定义为WebPage*wp;
WebServer & operator +=( WebPage webPage ) {
WebPage * tmp = new WebPage [ count + 1];
for (int i = 0; i < count ; i ++)
tmp [i] = wp[i];
tmp [ count ++] = webPage ;
delete [] wp;
wp = tmp;
return * this ;
}
Run Code Online (Sandbox Code Playgroud)
因此,我们为一个对象创建一个具有额外空间的动态分配的WebPages的新数组,然后我们为它们分配wp所持有的值,然后为我们想要添加到数组的对象.所以如果我删除delete[] wp;该程序仍然可以正常工作.那么如果我删除那行代码会发生什么?而且wp = tmp,这是什么意思,wp只是动态的新名称,所以它适合类中的名称,但内存中的位置仍然相同?要么?
这是班级
class Email{
private:
char to[100];
char from[100];
char subject[200];
char body[1000];
public:
Email();
Email(char *za,char *od,char *tema, char *telo){
strcpy(to,za);
strcpy(from,od);
strcpy(subject,tema);
strcpy(body,telo);
}
~Email();
void setTo(char *to) {strcpy(this->to,to);}
void setFrom(char *from) {strcpy(this->from,from);}
void setSubject(char *subject) {strcpy(this->subject,subject);}
void setBody (char *body) {strcpy(this->body,body);}
char* getTo () {return to;}
char* getFrom () {return from;}
char* getSubject () {return subject;}
char* getBody () {return body;}
void print () {
cout<<"To: "<<to<<endl<<"From: "<<from<<endl<<"Subject: "<<subject<<endl<<body;
}
};
Run Code Online (Sandbox Code Playgroud)
正如你所看到它包含一个析构函数.程序的其余部分只是一个功能和主要功能.
int checkEmail(char *p){
int n=0,i=0;
while(p[i]!='\0') …Run Code Online (Sandbox Code Playgroud) 我知道动态内存比设置固定大小的数组和使用它的一部分更有优势.但是在动态内存中,您必须输入要存储在数组中的数据量.使用字符串时,您可以根据需要键入任意数量的字母(甚至可以使用字符串表示数字,然后使用函数转换它们).这个事实让我觉得与字符串相比,字符数组的动态内存已经过时了.
所以我想知道使用字符串时有哪些优点和缺点?字符串占用的空间何时释放?是否可以通过删除优先于字符串的优势来释放动态分配的内存?请解释.