gpt4 book ai didi

c++ - 释放内存(如果可能)

转载 作者:行者123 更新时间:2023-11-28 00:45:06 24 4
gpt4 key购买 nike

我可以释放用于分配对象的内存吗?如果是这样,我该怎么做?

class CRectangle {
int width, height;
public:
CRectangle (int,int);
~CRectangle ();
int area () {
return (width * height);
}
};

CRectangle::CRectangle (int a, int b) {
width = a;
height = b;
}

CRectangle::~CRectangle () {
// Do something here
}

如果我使用动态内存分配,它将是:

   class CRectangle {
int *width, *height;
public:
CRectangle (int,int);
~CRectangle ();
int area () {
return (*width * *height);
}
};

CRectangle::CRectangle (int a, int b) {
width = new int;
height = new int;
*width = a;
*height = b;

}

CRectangle::~CRectangle () {
delete width
delete height
}

它们确实具有相同的输出,那么使用动态内存分配的优势是什么?

最佳答案

要回答这个问题,不。您的所有成员都是在对象实例化时自动分配的。您唯一需要担心释放内存的情况是在动态分配的情况下(因为自动内存在超出范围之前无法释放)。以这两个整数为例:

int a; //automatic allocation at point of declaration, will exist until it falls out of scope
int *a = new int; //dynamic allocation, exists until deleted. Falling out of scope without releasing memory can cause a memory leak

现在,如果您正在动态分配您的对象那么您可以释放内存,但这是在您的类之外完成的。

CRectangle *rect;
rect = new CRectangle; //dynamically allocated

//....

delete rect; //free memory allocated by rect

关于c++ - 释放内存(如果可能),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16579395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com