c ++成员变量的析构函数?

时间:2016-09-25 03:27:32

标签: c++ class object destructor dynamic-memory-allocation

我正在阅读this帖子,我想澄清一下,我是否需要显式删除动态创建的对象的成员变量?

例如,我有一个包含两个成员变量的类

class pointCloud
{
public:
    pointCloud();
    void addPoint(int);
    point getPoint(int);

private:
    int id;
    std::vector<point> pointArray;

};

然后我在main ...中创建它的动态实例。

int main()
{

    pointCloud* cloud = new pointCloud;
    cloud->addPoint(8);

    delete cloud;
}

我的理解是,当调用delete cloud;时,'id'和'pointArray'变量将自动从内存中删除/释放。它是否正确?或者我是否需要编写析构函数来显式删除这些成员变量?

2 个答案:

答案 0 :(得分:2)

  

或者我是否需要编写析构函数来显式删除这些成员变量?

在您的情况下无需编写,因为id是基本类型,pointArray是一个已经具有释放内存的析构函数的向量。

但是,如果你使用原始指针(通过new []分配缓冲区),那么在析构函数中你必须手动释放内存(delete [])。

答案 1 :(得分:1)

您不需要删除成员变量 - 但是如果您创建了它,则需要delete pointArray的内容(使用new

一般情况下,无论创建(某处)new还需要delete(某处);解决这个问题是你的问题 这里:您创建了pointCloud,并将其删除。那没关系。