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

“构造函数不能是虚的,因为还没有vtable”(引用自csdn)

“虚构造函数不是指在构造函数前加virtual,这样编译器不会通过的。因为构造函数的的绑定总是静态绑定的。不可能为虚函数,不仅构造函数不能是虚拟的,且构造函数中调用其它虚的成员函数也不能实现多态,简而言之就是构造函数中不能调用虚函数,而所谓的虚拟构造函数就是为了解决这个问题的一个解决方案,她采用了一种所谓信封/信纸的方法实现。具体的可以参考C++编程思想这本书中的附录,里面有详细地解释。

另外,在设计模式中的factory   method也被叫做virtual   constructor,既虚构造器,当然它解决的问题和我前面所说的不一样。

有兴趣的朋友可以参考这两本书。相信可以对这个问题有一个比较全面地了解。”(引用自csdn)

“虚拟构造函数?好象只有虚拟析够函数,没有说过虚拟构造函数哟!
虚拟析够函数使用环境如下:
class   a{
        public:
            a(){};
            ~a(){};
              ...
};
class   b   :   public   a
{   public:
            b(){};
            ~b(){};
            ...
};

a   *pa   =   new   b;
delete   pa;  
此时,如果   a   的析够函数是虚函数,则delete   pa;调用   b的析够函数   ~b(),否则,delete   pa;   调用a的析够函数~a(),就这么简单。”(引用自csdn)

 

一道阿里巴巴笔试题:

#include <iostream>
#include <stdio.h>
using namespace std;
struct A
{
 A()
 {
  cout << "A()" << endl;
 }
 virtual ~A()
 {
  cout << "~A()" << endl;
 }
};
struct B : public A
{
 B()
 {
  cout << "B()" << endl;
 }
 ~B()
 {
  cout << "~B()" << endl;
 }
};
int main()
{
 A *pA=new A;
 A *pB=new B;
 delete pA;
 delete pB;
 return EXIT_SUCCESS;
}

 

运行截图:

 

有虚析构函数,没有虚构造函数_第1张图片

 

你可能感兴趣的:(设计模式,delete,Class,阿里巴巴,Constructor,编译器)