成员变量的 C++ 析构函数?
c++ Destructor for Member Variables?
我正在阅读 this post 我想澄清一下,我是否需要显式删除动态创建的对象的成员变量?
例如,我有一个 class with 有两个成员变量,
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'变量会自动从内存中deleted/freed。这个对吗?或者我需要写一个析构函数来显式删除那些成员变量吗?
Or will I need to write a destructor to explicitly delete those member variables?
在你的情况下不需要写,因为id
是一个原始类型,pointArray
是一个已经有释放内存的析构函数的向量。
但是,如果您使用原始指针(通过 new[] 分配缓冲区),那么在析构函数中您必须手动释放内存(delete[])。
您不需要删除成员变量 - 但您需要 delete
pointArray 的内容,如果您创建它(使用 new
)
一般来说,无论你用new
创建(某处),你还需要delete
(某处);解决这个问题是你的问题。
此处:您创建了点云,然后删除了它。就好了。
我正在阅读 this post 我想澄清一下,我是否需要显式删除动态创建的对象的成员变量?
例如,我有一个 class with 有两个成员变量,
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'变量会自动从内存中deleted/freed。这个对吗?或者我需要写一个析构函数来显式删除那些成员变量吗?
Or will I need to write a destructor to explicitly delete those member variables?
在你的情况下不需要写,因为id
是一个原始类型,pointArray
是一个已经有释放内存的析构函数的向量。
但是,如果您使用原始指针(通过 new[] 分配缓冲区),那么在析构函数中您必须手动释放内存(delete[])。
您不需要删除成员变量 - 但您需要 delete
pointArray 的内容,如果您创建它(使用 new
)
一般来说,无论你用new
创建(某处),你还需要delete
(某处);解决这个问题是你的问题。
此处:您创建了点云,然后删除了它。就好了。