我为练习做了class str
,我使用了operator =
将对象分配给另一个对象。
我是这样做的。
#include <string.h>
class Str{
private:
char *str;
int len;
int num;
public:
Str(int leng);
Str(char *neyong);
~Str();
int length(void);
char *contents(void);
int compare(Str a);
int compare(char *a);
void operator=(char *a);
void operator=(Str a);
};
Str::Str(char *neyong){
len = strlen(neyong);
str = new char[len + 1];
strcpy(str, neyong);
}
Str::~Str(){
delete[] str;
}
int Str::length(void){
return len;
}
char* Str::contents(void){
return str;
}
void Str::operator=(Str a){
len = a.length();
str = new char[len+1];
strcpy(str, a.contents());
}
(为了便于阅读,我跳过一些功能)
我执行此操作就像下面的代码一样。
Str a("hahahaha"), b("hihihihihihi");
cout << a.contents() << endl;
cout << b.contents() << endl;
a = b;
cout << b.contents() << endl;
cout << a.contents() << endl;
问题:当我指定a = b
时,b的析构函数是
自动调用。可能b.~Str()
会删除其所有内容,因此b.contents()
不会返回正确的值。
我该如何解决这个问题????