所以在我的程序中我有一些類 - Button,Window和WindowButton。按鈕僅由文本,窗口 - 按鈕和座標(x,y)組成,WindowButton由窗口組成。 在WindowButton,我已經超負荷了< <操作是這樣的:C++ Overloading operator <<輸出地址
ostream& operator<<(ostream& out, WindowButton& ref)
{
ref.print();
return out;
}
當打印功能看起來像:
void WindowButton::print()
{
theWindow->print();
}
和窗口打印功能,在窗口類:
void Window::print()
{
char* buttonText = button->getText();
char* theText = new char[strlen(buttonText)+1];
strcpy(theText, buttonText);
cout << endl << "Window with coordinates (" << this->coord.x << "," << this->coord.y << ") , and button text \"" << theText << "\"" << endl;
}
主要:
WindowButton *test = new WindowButton();
cout << endl << test;
test->print();
最後一行提供正確的輸出,但第二行只提供內存地址。我究竟做錯了什麼?一切都應該工作正常,因爲test-> print();工作正常。
邊注:在'窗口: :print',在打印之前不需要將文本複製到緩衝區中。只需使用'cout << button-> getText()'。實際上你已經有了內存泄漏 - 每次調用函數時都會分配一個新緩衝區,然後永遠不會釋放它。 –
@JonathanSeng只會說一個問題,但爲什麼你動態地爲它分配一個內存複製按鈕的名字,打印出來然後扔掉。你想要消耗系統的所有內存?使用原始緩衝區進行打印以避免性能和內存使用,或者至少刪除動態分配的內存 – BigBoss
您的char *字符串很糟糕。 – Puppy