没有虚拟构造函数,但虚拟析构函数

Par*_*rag 3 oop constructor virtual-destructor

如果我们没有虚拟构造函数那么为什么我们有虚拟析构函数?构造函数也可以是虚拟的吗?

ami*_*mit 22

  • 虚构造函数没有意义 - 您确切地声明了创建的类型,并且在编译时它是众所周知的.编译器不需要[实际上不能,因为动态调度基于仅在创建对象之后创建的信息].所以没有虚拟构造函数.
  • 虚拟析构函数对于防止内存泄漏和监视系统非常重要.假设你有A* a = new B;[ B从继承A],和你以后delete a;-编译器有没有办法知道aB[在一般情况下],并且将调用A析构函数-如果它不是虚拟的,你可能会得到一个内存泄漏,或其他错误.
  • 使用虚拟析构函数 - 确保B调用析构函数,因为B对象正在被销毁.

  • 我不明白第一点。请你详细说明一下好吗? (2认同)
  • @jhamb:当您调用构造函数时 - 它类似于“new MyClass;”。创建对象的*动态类型*和*静态类型* - 完全相同,是真正的具体对象。 (2认同)