2012-02-12 43 views
-3

您不能返回本地定義的某個地址,因此您必須在「堆」上爲要放置的元素分配內存,以便程序中的其他函數可以訪問它。有人可以更詳細地解釋這一點嗎?什麼是堆? (使用'new')

MyClass* myFunc() 
{ 
    MyClass* pMC = new MyClass; 
    return pMC; 
} 

*在函數名稱中的用途是什麼?這是什麼表示? 我意識到有創建一個MyClass類型的指針,它指向這個對象的'堆'上的新分配。我只是不明白這究竟是什麼用處。

+0

您需要一個*動態對象*,它的生命週期必須手動管理,'new'創建這樣一個手動對象。雖然: - )(我猜你必須「刪除」它。) – 2012-02-12 19:52:56

+0

C++ for dubmies 5th – bden 2012-02-12 19:54:05

+0

可能重複[什麼是內存堆?](http:/ /stackoverflow.com/questions/2308751/what-is-a-memory-heap) – 2012-02-12 19:54:24

回答

2

這是什麼意思是該對象將一直存在,直到它被明確銷燬。

由於許多原因,處理這種破壞是一個非常糟糕的主意,並且存在許多方案,例如,在各個點自動清理它 - 獨特或共享所有權。這意味着直接使用new的代碼非常糟糕,並且對於new[]deletedelete[]也是如此。

在獨特的所有權中,有一個指針(std::unique_ptr<T>)擁有該對象,當它被銷燬時,對象被銷燬。這只是移動。在共享所有權中,當指向該對象的任何(std::shared_ptr<T>)處於活動狀態時,該對象保持活動狀態。當最後一個被破壞時,對象也被破壞。

相關問題