c++ primer plus阅读笔记12---手动调用析构函数
来源:互联网 发布:网络教育本科学费 编辑:程序博客网 时间:2024/06/08 09:55
再谈定位new运算符
我们来看代码:
#include <iostream>#include <string>#include <new>using namespace std;const int BUF=512;class JustTestting{private: string words; int number;public: JustTestting(const string &s="Just Testing",int n=0) { words=s; number=n; cout<<words<<" constructed\n"; } ~JustTestting() { cout<<words<<" destoryed\n"; } void Show()const { cout<<words<<","<<number<<endl; }};int main(){ char *buffer=new char[BUF]; JustTestting *pc1,*pc2; pc1=new(buffer)JustTestting; //pc1在堆上buffer处 pc2=new JustTestting("Heap1",20);//pc2在堆上 cout<<"Memory block address\n"<<"buffer:"<<(void *)buffer<<" Heap:"<<pc2<<endl; cout<<"Memory contents:\n"; cout<<pc1<<":"; pc1->Show(); cout<<pc2<<":"; pc2->Show(); JustTestting *pc3,*pc4; pc3=new(buffer)JustTestting("Bad Idea",6);//pc3在堆上buffer处 pc4=new JustTestting("Heap2",10); //pc4在堆上 cout<<"Memory contents:\n"; cout<<pc3<<":"; pc3->Show(); cout<<pc4<<":"; pc4->Show(); //pc1-> ~JustTestting(); delete pc1 pc3将会出错,这里需要手动调用pc1的析构函数 //pc3-> ~JustTestting(); delete pc2; delete pc4; delete []buffer; cout<<"done\n"; return 0;}
上边的代码中,pc1和pc3都在堆上申请的buffer中,当调用delete []buffer时,会将buffer处的内存全部释放,但是delete []buffer并不知道里边还有个对象,所以不会调用该对象的析构函数,为了调用其析构函数,必须手动调用,pc1-> ~JustTestting();
阅读全文
0 0
- c++ primer plus阅读笔记12---手动调用析构函数
- 《C Primer Plus》阅读笔记(4)
- 《C Primer Plus》阅读笔记(3)
- 《C Primer Plus》阅读笔记(2)
- 《C Primer Plus》开头阅读笔记
- C++primer plus阅读笔记第四章
- c++primer plus阅读笔记(一)
- c++primer plus阅读笔记(二)
- c++primer plus阅读笔记(四)
- c++primer plus阅读笔记(五)
- c++primer plus阅读笔记(六)
- c++primer plus阅读笔记(七)
- c++primer plus阅读笔记(八)
- c++primer plus阅读笔记(九)
- c++primer plus阅读笔记(十)
- 《C Primer Plus》学习笔记之 函数
- c++ primer plus阅读笔记6---内联函数引用变量
- C Primer Plus - 笔记
- 解决ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- python argparse用法总结
- [i.MX6Q][QNX Neutrino 6.6.0]调试笔记------IPL源码分析
- (OpenCV3.2.0)基于HOG特征的SVM训练与测试实例
- Area in Triangle(计算几何基础)
- c++ primer plus阅读笔记12---手动调用析构函数
- 人脸识别
- 安装mac版本的mysql详细教程
- PCA的数学原理
- Hadoop 跨集群复制文件
- JDK中的设计模式
- 稳定排序和不稳定排序
- 如果有只时光鸡 - 语义化的感悟
- RE库