c++使用技巧: 不要在构造函数/析构函数中调用虚函数
2012-12-06 11:51
381 查看
构造函数中调用虚函数将会因为派生类没有完成自身的初始化,而使得只能调用基类的虚函数定义,如果基类没有给出虚函数的实现,则会编译出错时出错(LNK2019没有找到对应函数的实现)。
析构函数中调用虚函数(同时需要保证基类析构函数是虚函数,否则删除基类指针将不会调用派生类得析构函数)。
测试代码:
析构函数中调用虚函数(同时需要保证基类析构函数是虚函数,否则删除基类指针将不会调用派生类得析构函数)。
测试代码:
class Base { public: Base() { cout<<"Base::Base"<<endl; Fun(); } virtual ~Base() { cout<<"Base::~Base"<<endl; Fun1(); } private: virtual void Fun() = 0; virtual void Fun1(); }; void Base::Fun() { cout<<"Base::Fun"<<endl; } void Base::Fun1() { cout<<"Base::Fun1"<<endl; } class Derived : public Base { public: Derived() { cout<<"Derived::Derived"<<endl; Fun(); } ~Derived() { cout<<"Derived::~`Derived"<<endl; //Fun1(); } private: virtual void Fun(); virtual void Fun1(); }; void Derived::Fun() { cout<<"Derived::Fun"<<endl; } void Derived::Fun1() { cout<<"Derived::Fun1"<<endl; }如果基类以及派生类各自拥有不同的申请资源建议使用同名的函数放在析构函数中,不建议使用虚函数声明,否则将会有种假象,不过注意小心重复删除(保证各自释放资源是针对自身分配,或者统一由派生类来申请基类以及自身的资源。)。
相关文章推荐
- c++使用技巧: 不要在构造函数/析构函数中调用虚函数
- 《Effective C++ 》条款9:永远不要在构造函数或析构函数中调用虚函数
- 不要在构造函数和析构函数中调用虚函数
- 读书笔记 effective c++ Item 9 绝不要在构造函数或者析构函数中调用虚函数
- 【C++】不要在构造函数或析构函数内调用虚函数
- C++不要在构造函数和析构函数中调用虚函数
- C++不要在构造函数和析构函数中调用virtual函数的原因
- [C++] 关于 构造函数(construction) 析构函数(destruction)中调用虚函数
- Effective C++: 尽量不要在构造函数中调用虚函数(virtual-function).
- 《Effective C++ 》条款9:永远不要在构造函数或析构函数中调用虚函数
- 读书笔记 effective c++ Item 9 绝不要在构造函数或者析构函数中调用虚函数
- C++不要在构造函数和析构函数中调用虚函数
- 构造函数和析构函数,在C++中能否声明为虚函数?构造函数和析构函数里面能否调用虚函数?
- C++不要在构造函数和析构函数中调用虚函数
- C++学习笔记-----不要在构造函数和析构函数中调用虚函数
- C++ 构造函数,析构函数中能否调用虚函数?
- C++中不要在构造函数或析构函数中调用virtual函数
- C++ 《Effective C++ 》条款9:永远不要在构造函数或析构函数中调用虚函数
- 读书笔记 effective c++ Item 9 绝不要在构造函数或者析构函数中调用虚函数
- 读书笔记 effective c++ Item 9 绝不要在构造函数或者析构函数中调用虚函数