C++ 删除内存泄漏的最佳方法

C++ 删除内存泄漏的最佳方法,c++,pointers,C++,Pointers,在Win32控制台应用程序(Visual C++)中,我有一个对象数组,每个对象包含一些其他对象和变量,例如(所有者和设备是结构,TimeInfo是类): 接下来是OrderManager类,它包含此对象的数组: items = (Order*)(malloc(100 * sizeof(Order))); 在程序中,我添加和删除项目,但在程序结束时释放内存的最佳方法是什么?我有免费的(经理物品);,但是这不起作用。我将使用析构函数来管理OrderManager类中分配的释放内存 您应该使用C+

在Win32控制台应用程序(Visual C++)中,我有一个对象数组,每个对象包含一些其他对象和变量,例如(所有者和设备是结构,TimeInfo是类):

接下来是OrderManager类,它包含此对象的数组:

items = (Order*)(malloc(100 * sizeof(Order)));

在程序中,我添加和删除项目,但在程序结束时释放内存的最佳方法是什么?我有免费的(经理物品);,但是这不起作用。

我将使用析构函数来管理OrderManager类中分配的释放内存

您应该使用C++ New和Delphi来分配/释放内存,也应该使用容器来存储对象的集合。 有关如何初始化向量的选项列表,请参阅此链接:

类订单管理器{
私人:
向量项;
公众:
订单管理器(){
//请参阅上面的链接
}
~OrderManager(){
items.clear();
}
}

下面是David Mazières关于C++新操作符的一篇有趣文章的链接。

人们已经指出,在这种情况下应该避免使用malloc。如果要分配100个Order实例,可以尝试以下方法:

Order* items = new Order[100];
在这种情况下,将为每个实例调用Order的默认构造函数

要释放内存,请执行以下操作:

delete[] items; // note the "[]"
您可能希望在OrderManager中处理订单,因此新建/删除的典型位置将位于OrderManager的构造函数/析构函数中

使用new和delete时,将调用con-和destructor。 调用con-和destructor很重要,因为它们通常用于在构造时设置和初始化对象,并在销毁时释放对象

有了malloc和free,所有发生的事情就是在堆上分配内存

在你的问题中,你提到了这一点

free(manager.items);

不起作用。你不应该释放指针项而不是Manager?项目?< /p>为什么你使用“代码> MaloC < /Cord>在C++中分配内存?1)不要垃圾邮件标签。C不是C++ 2,C++中不使用C内存分配函数。3)<代码> Malc C < /Cl> >代码>类< /Cl>,方法更糟。使用<代码> STD::vector < /代码>。自从C有类时,C类程序带有类关键字、构造函数和析构函数,用C++标记发布?请您在C++中不要提倡使用<代码> MALLC/<代码>。不要使用C样式的类型转换。和< <代码>新[]/COD>不是“新C++风格”——新C++风格是不手动分配动态数组,而是使用容器,例如:<代码> STD::vector < /代码> <代码> MalOC的用法是错误的。code>Order不是POD类型,使用
malloc
创建100个对象不会构造
Order
对象。谢谢,我会更新。错误的建议,推广了旧的易出错技术,而不是
std::vector
delete[] items; // note the "[]"
free(manager.items);