我在这里看过类似的问题,但仍然无法意识到,我做错了什么。求助。
我需要为有限大小的字符串类创建模板(如在Pascal中) 这是代码:http://pastebin.com/syZf3yM8
答案 0 :(得分:0)
在my_string析构函数中,代码为:
~my_string () {
delete [] this->text;
}
你不应该这样做,因为text是数组,而不是指针。当您致电*S3 = *S1 + *S2
时,会调用my_string <max_size, T> operator+(const my_string& s)
。在此运算符中,my_string <max_size, T> res
是局部变量并位于堆栈中。当此功能结束时,会自动删除res。因此,将res分配给S3是错误的。你可以这样修理:
~my_string () {
}
my_string <max_size, T> operator+(const my_string& s) {
my_string <max_size, T> res;
int count = 0;
while (this->get_char(count) != '\0') {
res.set_char(this->get_char(count), count);
count++;
}
for(int i = 0; count < max_size; i++){
if (s.get_char(i) == '\0') { res.set_char('\0', count); break; }
res.set_char(s.get_char(i), count);
count++;
}
return res;
}
my_string& operator=(const my_string& s){
int size=s.get_length();
for (int i = 0; i < size; i++){
this->set_char(s.get_char(i),i);
}
return *this;
}
最后在主要功能中:
delete S1;
delete S2;
delete S3;