Boolan(博览网)——C++面向对象高级编程(下)(第五周作业结论)

1. 构造函数和析构函数的调用过程

  • 创建子类时,先调用父类的构造函数,再调用子类的构造函数。(构造由内而外
  • 销毁子类时,先调用子类的析构函数,再调用父类的析构函数。(析构由外而内

2. Apple 中重载一般的 operator new 和 operator delete (无异常)

  • 在堆区创建对象时,先调用重载的 new ,然后再分别调用父类和子类的构造函数。
  • 在堆区销毁对象时,先分别调用子类和父类的析构函数,然后再调用重载的 delete

3. Apple 中重载一般的 operator new 和 operator delete (构造有异常)

当创建对象产生异常时,会对对象调用 delete 。其中销毁对象时,只调用了父类的析构函数,然后调用 operator delete 来释放申请的内存。异常对象在异常处理完成后再被销毁。

4. Apple类中 placement new 调用的 ctor 有异常

当 placement new 所调用的 ctor 抛出异常,会调用相对应的 operator (placement) delete 来处理异常,其用途是释放与之对应的 placement new 分配所得的内存。

5. Apple类中 placement new 调用的 ctor 无异常

当 placement new 所调用的 ctor 无异常,会调用operator delete(void* ptr) 来处理异常。

6. Apple类中 placement new 调用的 ctor 有异常(无对应 delete )

当 placement new 所调用的 ctor 抛出异常,而没有与之对应的 operator (placement) delete 来处理异常,则默认不进行异常处理。因此保险起见,placement new 和 placement delete 必须要成对出现,否则就会产生内存泄漏。

程序运行结果:

Boolan(博览网)——C++面向对象高级编程(下)(第五周作业结论)_第1张图片

你可能感兴趣的:(Boolan(博览网)——C++面向对象高级编程(下)(第五周作业结论))