Effective C++ 学习笔记(11)
2011-08-03 15:01
309 查看
确定基类有虚析构函数
执行结果:
对此解释:C++语言标准规定,当通过基类指针删除派生类的对象,而基类又没有虚析构函数,结果是不确定的。
对此,将A的析构函数改为虚函数:
执行结果:
结果正确。
以上我们是在堆上分配的内存。
改写main函数,在栈上分配:
结果同上。分配在栈上的对象自动调用构造函数与析构函数。
class A { public: A() { cout<<"A constructor"<<endl; } ~A() { cout<<"A destructor"<<endl; } }; class B: public A { public: B() { cout<<"B constructor"<<endl; } ~B() { cout<<"B destructor"<<endl; } }; int main() { A * p =new B(); delete p; return 0; }
执行结果:
对此解释:C++语言标准规定,当通过基类指针删除派生类的对象,而基类又没有虚析构函数,结果是不确定的。
对此,将A的析构函数改为虚函数:
class A { public: A() { cout<<"A constructor"<<endl; } virtual ~A() { cout<<"A destructor"<<endl; } };
执行结果:
结果正确。
以上我们是在堆上分配的内存。
改写main函数,在栈上分配:
int main() { B b; return 0; }
结果同上。分配在栈上的对象自动调用构造函数与析构函数。
相关文章推荐
- Effective C++ 学习笔记11
- Effective C++ 学习笔记
- Effective C++ 学习笔记(16)
- Effective C++ 学习笔记(7)
- Effective C++ 学习笔记(6)
- Effective C++ 学习笔记5
- Effective C++学习笔记_条款42:了解typename的双重意义
- [More Effective C++ 学习笔记]异常
- Effective C++ 学习笔记[2]
- Effective C++ 学习笔记
- Effective C++ 学习笔记(3)
- Effective C++ 学习笔记(27)
- C++学习笔记11:定位new运算符
- Effective C++ 学习笔记(8)
- More Effective C++学习笔记-条款1|2|3|4
- C++之Effective STL学习笔记Item20
- Effective c++ 学习笔记(二)
- effective c++ 学习笔记 1
- Effective C++ 学习笔记(一)
- Effective c++ 学习笔记(三)