“构造函数不能是虚的,因为还没有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;
}
运行截图: