a1798826049 2014-11-07 08:13
浏览 707

似乎是析构函数出问题

#include
#include
using namespace std;
#ifndef _String_h
#define _String_h
class String{
public:
String(char *s=NULL);
//~String();
String operator+( String &cs);
void display();
private:
char *str;
};
String::String(char *s){
if (s==NULL){
str = new char[1];
str= '\0';
}
else{
int length = strlen(s)+1;
str = new char[length ];
strcpy_s(str,length, s);
}

};
/*String::~String(){
cout << "diao yong xigou" << endl;
delete []str;
}*/

String String::operator+(String &cs){
String newstr;
int l = strlen(str) + strlen(cs.str)+1;
newstr.str = new char[l];
strcpy_s(newstr.str,l, str);
strcat_s(newstr.str,l, cs.str);
return newstr;
}

void String::display(){
cout << str << endl;
}
#endif
#include "String.h"
int main(){
String c1("obj"),c2("ect"),c3;
cout << "c1="; c1.display();
cout << "c2="; c2.display();
c3 = c1 + c2;
cout << "c3="; c3.display();
return 0;

}

没注视掉析构函数运行出错,在c1.display时会调用析构函数,但我下面还要c1,为何会调用析构函数呢,但注释后可以运行成功,但没有delete释放内存,不知内存会被释放不.

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥100 求数学坐标画圆以及直线的算法
    • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
    • ¥15 名为“Product”的列已属于此 DataTable
    • ¥15 安卓adb backup备份应用数据失败
    • ¥15 eclipse运行项目时遇到的问题
    • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
    • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
    • ¥15 自己瞎改改,结果现在又运行不了了
    • ¥15 链式存储应该如何解决
    • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站