static函数可直接通过类名调用,不一定需要实例化对象,而virtual需要对象实例化好vtable才能被调用,两者不能搞在一起,再学习newdelete的时,在网上搜到了这样的例子,惊汗,一切尽在代码中:
//new delete运算符是static的,没有this指针
#include <iostream>
using namespace std;
class B{
public:
virtual~B(){
cout<<"destructB"<<endl;
}
static voidoperator delete(void*){
cout<<"Bdelete"<<endl;
}
static voidoperator delete[](void*){
cout<<"Bdelete[]"<<endl;
}
};
class D:public B{
public:
virtual~D(){
cout<<"destructD"<<endl;
}
static voidoperator delete(void*){
cout<<"Ddelete"<<endl;
}
static voidoperator delete[](void*){
cout<<"Ddelete[]"<<endl;
}
};
int main(){
B* test=newD;
deletetest;
}
输出结果:
destruct D
destruct B
D delete
当将析构的virtual去掉后,结果变为Bdelete,汗,delete会根据所在类的析构是否是virtual将自己自动传为virtual
转自:http://blog.csdn.net/yangguang0501/article/details/6096421
//new delete运算符是static的,没有this指针
#include <iostream>
using namespace std;
class B{
public:
};
class D:public B{
public:
};
int main(){
}
输出结果:
destruct D
destruct B
D delete
当将析构的virtual去掉后,结果变为Bdelete,汗,delete会根据所在类的析构是否是virtual将自己自动传为virtual
转自:http://blog.csdn.net/yangguang0501/article/details/6096421