繁体   English   中英

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

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

大家好 ! 我是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数组。

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

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

ELEMENT *T = new ELEMENT;

初始化指向对象的指针。

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

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

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

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM