当前位置: 技术问答>linux和unix
g++对需函数的处理
来源: 互联网 发布时间:2015-11-17
本文导语: 有这么一个类: struct Parent { virtual void func() = 0; }; 编译的时候给我一个警告,说这个类有需函数,那么这个类最好有一个虚析构函数。 请问谁能“非常确切”的知道理由? struct Child : public Parent { virtual...
有这么一个类:
struct Parent {
virtual void func() = 0;
};
编译的时候给我一个警告,说这个类有需函数,那么这个类最好有一个虚析构函数。
请问谁能“非常确切”的知道理由?
struct Child : public Parent {
virtual void func() {
}
};
void ff(){
Child* c = new Child();
Parent* p = c;
delete p; //和delete c有什么区别?如果Child或者Parent有虚析构函数又会怎么样?
}
谢谢。
struct Parent {
virtual void func() = 0;
};
编译的时候给我一个警告,说这个类有需函数,那么这个类最好有一个虚析构函数。
请问谁能“非常确切”的知道理由?
struct Child : public Parent {
virtual void func() {
}
};
void ff(){
Child* c = new Child();
Parent* p = c;
delete p; //和delete c有什么区别?如果Child或者Parent有虚析构函数又会怎么样?
}
谢谢。
|
delete p;如果Parent是虚析构,则会调用Child的析构,否则只会调用Parent的析构,有可能导致问题,如资源泄漏。
因为你用了虚函数,编译器认为你会派生子类(否则虚就没有意义了),使用动态联编,所以会提示析构函数应该是虚的。
因为你用了虚函数,编译器认为你会派生子类(否则虚就没有意义了),使用动态联编,所以会提示析构函数应该是虚的。
|
没什么区别。
析构函数只是系统自动调用
析构函数只是系统自动调用