| 概述 | 组 | 树 | 图形 | 不推荐 | 索引 | 概念 |
CP 优化器提供了一个重载的 "new操作符。 该操作符被重载,用于在与调用优化器("IloCPEngine实例)相关的堆上分配数据。 在这种情况下,使用该操作符分配的对象所使用的内存会被自动回收:
IloModel实例)或其他可提取对象("
IloExtractable实例或其子类)被重新提取给优化器("IloCP实例)时;
end被调用时。由于会自动释放内存,因此作为开发人员,切勿删除使用该操作符分配的对象。
换句话说,"delete操作符不得用于在与优化器相关的堆上分配的对象。
使用这个重载的 "new操作符并不是强制性的。 事实上,CP 优化堆的使用并不是强制性的。 在定义 ILC_NO_MEMORY_MANAGER 环境变量时,您可以决定 CP 优化器是使用重载的 "new操作符还是传统的 C++"new操作符。 特别是,您可以使用标准的 "new操作符或特殊用途分配器分配 CP 优化器类的实例。 不过,有些 CP 优化器对象还包含其他对象。 例如,CP 优化器变量包含代表其域的其他对象(有限集)。 这些子对象被分配到优化器的分配堆中。 同样,约束条件也被分配到优化器分配堆中。 因此,绝不能删除它们。 CP 优化器会透明地管理相应的内存。
To allocate an array of size objects of type T on the optimizer allocation heap, you simply write this:
T* array = news.getHeap()) T [size];
如果不想使用优化器分配堆,可以这样写:
T* array = new T [size];
当你按照我们推荐的方式分配数组时,它会在以下两种情况下自动取消分配:如果回溯到分配前设置的选择点;如果调用优化器的成员函数 "end被调用。
new运算符。IBMILOG Concert Technology 提供这种重载 C++"new操作符。 该操作符被重载,用于在与调用环境("IloEnv实例)相关的内部数据结构上分配数据。 在调用成员函数 "IloEnv::end时,使用该重载操作符分配的对象所使用的内存将被自动回收。 由于会自动释放内存,因此作为开发人员,切勿删除使用该操作符分配的对象。
换句话说,对于使用重载的 "new操作符分配的对象,必须使用 "不操作符和 "delete操作符。
在 Concert Technology 应用程序中,并非必须使用这个重载的 "new操作符。 您可以在IBMILOG 优化产品随附的用户手册中看到其使用示例。