我想重寫一個類型的構造函數涉及調用new(也就是說,構造函數需要動態分配其他東西),因此它的析構函數涉及調用delete 。冥冥之中,我想能夠使用這樣的:在C++中爲動態分配類型重載+運算符
T c = a + b;
我的問題是,我顯然需要創建+函數內部類型T的對象。如果我在+函數實現內部的堆棧中分配一個T的臨時實例以返回副本,那麼此實例的析構函數將在+調用退出並且(或者我相信)分配給c之前被調用。所以這不是一個選項。我的其他選項似乎是使用new
並在返回時取消引用新返回的指針。然而,這種方法的問題似乎是指針將無法訪問,並且無法在其上調用delete
。
所以我的問題是......它不可能是超載運營商的類型涉及動態分配是罕見的。人們通常如何處理這種情況?
我不明白這個問題。如果你的類型'T'在它的構造函數中有'new'並且在它的析構函數中有'delete',對於某個成員,那麼這有什麼問題? –
我想寫T c = a + b;問題是+函數需要返回一個T類型的對象。我應該在哪裏創建這個對象?在+函數中的堆棧中不起作用 - 它在超出範圍時會調用它,當它從+函數返回時,就在必要的賦值之前!我應該使用新的關鍵字,然後在返回時解除引用?但是,我永遠無法恢復由新返回的指針,我永遠不會刪除它,導致內存泄漏。 – Gravity
嗯......複製構造函數在通過複製返回值時會自動調用嗎?像這樣的東西將是必要的,以使我想要做的工作。這是C++的設計者爲解決這類問題而實現的嗎(因此在其他文章中提到了複製構造函數?) – Gravity