c++ - 在 C++ 中创建对象的动态数组、删除对象和释放内存

标签 c++

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

我需要一些帮助,

我尝试创建对象 (类型 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,您将能够做到这一点,而且根本不必担心内存分配和释放。

关于c++ - 在 C++ 中创建对象的动态数组、删除对象和释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21928476/

相关文章:

c++ - 如何在C++中预订剧院座位?

c++ - 如何在 C++ 中读取复数的二进制文件

c++ - String 加 Char - 发生了什么?

c++ - 代码在编译时产生三个错误

c++ - 通用 Makefile 忽略变量

c++ 实现有界原始类型

c++ - 寻找适用于 Windows 7 的 C++ 中的 poco ssl websocket 客户端示例

c++ - 使用 imread 打开具有 unicode 名称的图像文件

c++ - 为什么 func ("abc" "def");编译

c++ - C++ 11条件变量语义