再谈new的内存的释放实例-类的多态
来源:互联网 发布:淘宝海外直购 编辑:程序博客网 时间:2024/05/20 09:11
面向对象编程都知道多态的概念。我来谈多态中new的内存问题。
class Base
{
public:
Base(){
cout << "Base::Base()" << endl;
};
~Base(){//注释1
cout << "Base::~Base()" << endl;
};
virtual void DoSomthing()
{
cout << "Do something in class Base!"<< endl;
};
};
class Derived:public Base
{
public:
Derived(){
cout << "Derived::Derived()" << endl;
};
~Derived(){
cout << "Derived::~Derived()" << endl;
};
virtual void DoSomthing()
{
cout << "Do something in class Derived!"<< endl;
};
};
int main()
{
Derived *ptest1 = new Derived();//Derived类的指针 //注释2
ptest1->DoSomthing();
delete ptest1;
Base*ptest2 = new Derived();//Base类的指针 //注释3
ptest2->DoSomthing();
delete ptest2;
return 0;
}
从上述代码中的注释3处,可以很清楚的看出,虽然new的是子类Derived的对象
但是把地址赋给父类,释放的是父类的指针。
总结new 分配内存,delete 释放内存.注意,使用delete的关键在于,将它用于new
分配的内存.这并不意味着要使用用于new的指针,而是用于new的地址
第二个问题:注释2处,可以正常释放内存,构造函数的顺序是父类->子类,而析构函数的调用顺序是
子类->父类,
注释3处,多态的调用,只析构了父类,而造成子类未被释放。所以需要在注释1处加上关键字
virtual,虚函数是动态绑定的,virtual关键字的作用是确定new对象是子类的还是父类的
- 再谈new的内存的释放实例-类的多态
- 函数中new的内存的释放实例
- new/malloc的内存不释放
- delete释放new[ ]开辟的内存
- 用实例证明dll中new的内存不能在exe中释放
- 用实例证明dll中new的内存不能在exe中释放
- 用实例证明dll中new的内存不能在exe中释放
- C++ 方式的内存分配与释放 new 和 delete
- C++【堆内存的动态分配与释放(new/delete)】
- New 类的实例
- 体会内存的释放
- 内存申请的释放
- Vector的内存释放
- vector的内存释放
- vector的内存释放
- vector的内存释放
- vector的内存释放
- vector的内存释放
- PAT 1005. 继续(3n+1)猜想 (25) —— Java
- apk安装失败原因列表
- web开发工具Sublime Text 3
- Problem H Pyro Tubes
- SpringMVC之转换器和格式化
- 再谈new的内存的释放实例-类的多态
- 数据库中间件 MyCAT 源码解析 —— 分片结果合并(一)
- Mybatis中$和#的区别
- 记票统计
- 串口波特率计算详解
- javascript 中的 this用法。
- vm安装mac虚拟机 vcpu-0错误
- 机器学习算法实现解析——libFM之libFM的训练过程之Adaptive Regularization
- H5移动端调用底层接口的一些使用方法-01调用系统的摄像头