一段简单的代码,请写出输出结果。(有关operator+ 和 临时对象)
// 一个简单的模拟string的类
#include <iostream>
#include <string>
using namespace std;
class MyString
{
public:
MyString(const char* pStr)
: m_pStr(NULL)
{
m_pStr = new char[strlen(pStr) + 1];
strcpy(m_pStr, pStr);
}
MyString(const MyString& myStr)
: m_pStr(NULL)
{
const char *pStr = myStr.GetStrBuffer();
m_pStr = new char[strlen(pStr) + 1];
strcpy(m_pStr, pStr);
}
~MyString()
{
delete [] m_pStr;
m_pStr = NULL;
}
MyString& operator += (const MyString& rv)
{
const char *pStr = rv.GetStrBuffer();
char *pTempStr = new char[strlen(m_pStr) + strlen(pStr) + 1];
strcpy(pTempStr, m_pStr);
strcat(pTempStr, pStr);
delete [] m_pStr;
m_pStr = pTempStr;
return *this;
}
const char* GetStrBuffer() const
{
return m_pStr;
}
private:
char *m_pStr;
};
MyString& operator + (const MyString& lv, const MyString& rv)
{
return (MyString(lv) += rv);
}
ostream& operator << (ostream& os, const MyString& myStr)
{
return os << myStr.GetStrBuffer();
}
int main(int argc, _TCHAR* argv[])
{
string stdstra("stdstra");
string stdstrb("stdstrb");
cout << stdstra + stdstrb << endl;
MyString strA("strA");
MyString strB("strB");
cout << strA + strB << endl;
return 0;
}
就这样一段代码,简单模拟了一个String类,但是却在strA + strB的时候卡壳了。
我不解的是operator +()返回的应该是一个临时对象,但是调试中没有发现临时对象的产生,在函数中就直接析构返回了。
请大侠们帮忙分析下,同样的std::string没有问题(返回的时候通过拷贝构造函数成功创建一个临时对象)。