2012-02-12 107 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>)处于活动状态时,该对象保持活动状态。当最后一个被破坏时,对象也被破坏。

相关问题