這是一個天真的例子,我編碼研究C++操作符重載。當我執行它時,代碼掛在語句c = a + b;和控制從未達到c.display();
爲什麼這個代碼掛在提到的地方?
隨着調試的一部分,如果我在賦值操作符重載函數它打印出的HelloWorld放cout << ptr << '\n';
,所以串似乎並不爲畸形。
爲什麼它掛起呢?我在想什麼?
class mystring
{
char *ptr;
public:
mystring(char *str = "")
{
ptr = new char[strlen(str) + 1];
strcpy(ptr,str);
}
mystring operator +(mystring s)
{
char *str = new char[strlen(ptr) + strlen(s.ptr) + 1];//where should this memory be freed
strcpy(str,ptr);
strcat(str,s.ptr);
return mystring(str);
}
void operator =(mystring s)
{
strcpy(ptr,s.ptr);
//cout << ptr << '\n'; \\Debug - this prints out HelloWorld but still hangs
}
void display()
{
cout << ptr << '\n';
}
~mystring()
{
delete [] ptr;
}
};
int main()
{
mystring a="Hello",b="World",c;
c = a + b;
c.display();
getchar();
}
編輯:編譯器:MS-的Visual C++ 2010速成/ Windows的。
'運營商= '不分配內存。 'operator +'導致分配兩次。 –
我也想補充一點,你應該實現一個合適的拷貝構造函數... – Nim
像valgrind這樣的內存分析器會發現這種內存錯誤,使用一個。 – Francois