我正在使用动态字符串,复制构造函数和重载存在问题。 我正在使用运算符+来重载。重载函数用于插入两个char *字符串。 这里只是代码的摘录:
MyString::~MyString()
{
delete[] text; //char *text, as my private data
}
MyString::MyString(const MyString & obj)//copy constructor here
{
text = new char[obj.len];
for (int i = 0; i < obj.len; i++)
{
text[i] = obj.text[i];
}
len = obj.len;
}
MyString MyString::operator+(MyString & s)
{
MyString temp;
temp.len = len + s.len + 1;
int i;
for (i = 0; i < len; i++)
{
temp.text[i] = this->text[i];
}
for (int i = 0; i < s.len; i++)
{
temp.text[i + len] = s.text[i];
}
temp.text[len + s.len] = 0;
return temp;//PROBLEM HERE
}
这是我的问题:
operator +函数在返回temp
之前调用复制构造函数和析构函数
虽然有一个复制构造函数返回的是一个deleted []数组。
什么是捕获?感谢
答案 0 :(得分:1)
假设您有以下代码
MyString s1; // Initialized to something
MyString s2; // Initialized to something else
MyString s3 = s1 + s2;
然后表达式s1 + s2
创建一个临时副本(由operator+
函数返回的副本)。然后将此临时副本传递给复制构造函数,以通过销毁临时对象来创建s3
,然后。
无论如何这是理论,实际上编译器将 elide 复制。
答案 1 :(得分:-2)
进行这些更改并尝试: 1. temp.text [len + s.len] =&#39; \ 0&#39 ;; // Null终止