跳至主内容
框架 无框架

新操作符

public void *operator new(size_ts,IlcAllocationStack*heap)
定义文件: ilcp/cpext.h
包含文件: <ilcp/cpextilcp/cpext.h
重载的 C++ 运算符。

CP 优化器提供了一个重载的 "new操作符。 该操作符被重载,用于在与调用优化器("IloCPEngine实例)相关的堆上分配数据。 在这种情况下,使用该操作符分配的对象所使用的内存会被自动回收:

由于会自动释放内存,因此作为开发人员,切勿删除使用该操作符分配的对象。

换句话说,"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被调用。


新操作符

public void *operator new(size_tsz, constIloEnv&env)
定义文件: ilconcert/iloenv.h
重载的 C++"new运算符。

IBMILOG Concert Technology 提供这种重载 C++"new操作符。 该操作符被重载,用于在与调用环境("IloEnv实例)相关的内部数据结构上分配数据。 在调用成员函数 "IloEnv::end时,使用该重载操作符分配的对象所使用的内存将被自动回收。 由于会自动释放内存,因此作为开发人员,切勿删除使用该操作符分配的对象。

换句话说,对于使用重载的 "new操作符分配的对象,必须使用 "操作符和 "delete操作符。

在 Concert Technology 应用程序中,并非必须使用这个重载的 "new操作符。 您可以在IBMILOG 优化产品随附的用户手册中看到其使用示例。