美文网首页
Boolan(博览网)——C++面向对象高级编程(下)(第五周作

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

作者: Michael_SR | 来源:发表于2017-11-19 23:47 被阅读0次

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++面向对象高级编程(下)(第五周作

      本文链接:https://www.haomeiwen.com/subject/xgapvxtx.html