创建对象的动态数组,删除对象并释放C++内存

create a dynamic array of object, delete object and free memory in C++

本文关键字:释放 C++ 内存 对象 删除 动态 数组 创建对象      更新时间:2023-10-16

大家好!我是C++的初学者,所以我真的没有很好的经验。

我需要一些帮助,

我尝试创建对象(type ELEMENT)的动态数组,我想从数组中删除对象时遇到问题(错误 2157)

这是代码的一部分:

class ELEMENT
{
private :
     int id_num;
     int nbnr;
     int BI;
public :
: void () ................
: ...............
:  
 };
 ELEMENT *T;   
/* before calling the next fonction, I allocate a dynamic memory space every time for T by
 T = new TAB;  because I don't know the exact size of T, I don't know if it's right like this ?
*/
void eval (int nr, int BS)
{
for (int i=0; i< size; i++)
{if (T [i].BI >= BS)
delete T [i];   // I try to delete the object in position (i) and also free allocated memory
// before I tried with delete [] T; doesn't work !
}
}

另一个问题,是否有任何函数可以获取T的当前大小。我尝试过SizeOf(T)没有给出正确的价值。

就是这样,感谢您的回答!

您需要决定数组的大小,然后动态分配为

T = new ELEMENT[size];

这将创建一个 ELEMENT 项数组,您可以使用这些项删除一次

delete [] T;

不应对 T 的每个元素调用 delete。您唯一需要它的情况是 T 包含指向动态分配内存的指针(在您的情况下它们没有),因此不要这样做。

没有办法使用动态分配的数组来获取 T 的大小。但是,如果您要改用std::vector则可以执行此操作,并且根本不用担心内存分配和释放。

首先,您不能从数组中删除一个元素并释放内存。您只能通过 delete[] 删除 while 数组。

其次,你定义TELEMENT的指针,所以sizeof()将返回指针大小,但不返回数组的大小。您可以自己记住大小,也可以T定义为数组,例如 ELEMENT T[10]

使用语句 ELEMENT *T 创建了一个指向类 ELEMENT 对象的指针,但该指针当前未初始化(它不指向任何对象)。用

ELEMENT *T = new ELEMENT;

初始化指向对象的指针。

对于您可以使用的数组大小

sizeof(nameOfYourArray)/sizeof(nameOfYourArray[0])

通过将总字节数除以第一个元素占用的字节数来计算数组的大小。

希望这有帮助!