什么是堆? (使用'新')

时间:2012-02-12 19:49:53

标签: c++ pointers heap

您无法返回本地定义的内容的地址,因此您必须在“堆”上分配内存,以便放置此元素,以便程序中的其他函数可以访问它。有人可以更详细地解释一下。

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

函数名中*的目的是什么?这表明什么? 我意识到有一个MyClass类型的指针的创建,它指向该对象的'堆'上的新分配。我只是不明白这是什么用途。

1 个答案:

答案 0 :(得分:2)

这意味着该对象将一直存在,直到它被明确销毁。

出于多种原因,自己处理这种破坏是一个非常糟糕的主意,并且存在许多方案可以在不同的点自动清理它 - 例如,独特或共享的所有权。这意味着直接使用new的代码非常糟糕,而new[]deletedelete[]的代码则非常糟糕。

在唯一所有权中,有一个指针(std::unique_ptr<T>)拥有该对象,当它被销毁时,该对象将被销毁。这是仅限移动的。在共享所有权中,当指向该对象的任何(std::shared_ptr<T>)处于活动状态时,该对象保持活动状态。当最后一个被销毁时,该对象也会被销毁。