官术网_书友最值得收藏!

Unmanaged memory – using new/delete

The new operator is almost the same as a malloc call, except that it invokes a constructor call on the object created immediately after the memory is allocated. Objects allocated with the operator new should be deallocated with the operator delete (and not free()).

Getting ready

In C++, use of malloc() was replaced, as best practice, by use of the operator new. The main difference between the functionality of malloc() and the operator new is that new will call the constructor on object types after memory allocation.

How to do it...

In the following code, we declare a simple Object class, then construct an instance of it using the operator new:

class Object
{
  Object()
  {
    puts( "Object constructed" );
  }
  ~Object()
  {
    puts( "Object destructed" );
  }
};
Object* object= new Object(); // Invokes ctor
delete object; // Invokes dtor
object = 0; // resets object to a null pointer

How it works…

The operator new works by allocating space just as malloc() does. If the type used with the operator new is an object type, the constructor is invoked automatically with the use of the keyword new, whereas the constructor is never invoked with the use of malloc().

There's more…

You should avoid using naked heap allocations with the keyword new (or malloc for that matter). Managed memory is preferred within the engine so that all memory use is tracked and clean. If you allocate a UObject derivative, you definitely need to use NewObject< > or ConstructObject< > (outlined in subsequent recipes).

主站蜘蛛池模板: 腾冲县| 宕昌县| 正定县| 集贤县| 育儿| 旬邑县| 万盛区| 吉安市| 廊坊市| 永善县| 宜兴市| 凤翔县| 沙洋县| 长岭县| 来宾市| 上栗县| 秀山| 淮阳县| 昌黎县| 涟源市| 邢台县| 蒙山县| 广西| 上杭县| 罗田县| 苍梧县| 榆社县| 常宁市| 晋宁县| 峨边| 公主岭市| 武冈市| 日照市| 封丘县| 苍山县| 锡林郭勒盟| 开平市| 绥江县| 桂林市| 南昌市| 崇礼县|