一个关于析构的容易犯错的作用域的程序
来源:互联网 发布:tcp协议栈源码 编辑:程序博客网 时间:2024/06/01 08:16
#include <iostream>using namespace std;class CA{int* a;public:friend class CB;CA(int x){cout<<"构造方式1被调用"<<endl;a=new int[5];*a=x;}CA(){cout<<"构造方式2被调用"<<endl;a=new int[5];*a=0;}~CA(){cout<<"析构被调用"<<endl;*a=*a-1;}int get_a(){return *a;}};class CB{public:int get(CA test){return *(test.a);}};int main(int argc,char* argv[]){CA test(2);CB test2;cout<<test.get_a()<<endl;cout<<test2.get(test)<<endl;cout<<test2.get(test)<<endl;getchar();return 0;}
输出结果是:
2
析构被调用
2
析构被调用
1
析构被调用
不知道你是否会奇怪,析构被调用之后为什么输出还是2
不是应该减1之后输出1吗
是的,其实减1操作已经完成了
只是类中的函数的返回值还是2,因为在返回之后才析构,减1
所以有一个顺序的问题,其实值已经变为1了。
- 一个关于析构的容易犯错的作用域的程序
- JS容易犯错的this和作用域
- 编写C程序容易犯错的地方
- 容易犯错的做法
- java容易犯错的地方
- 容易犯错的一些东西
- Makefile容易犯错的语法
- Java面试里关于try,catch,finally,return容易犯错的一个问题
- Java中容易犯错的一个地方(转)
- python yield send 一个容易犯错的地方
- 一个容易犯错的js手机号码验证正则表达式
- 关于SqlServer 视图容易犯错的两个地方
- 关于equal()使用时容易犯错的地方
- Java中几个容易犯错的地方
- js 中容易犯错的变量声明
- [C&C++] 容易犯错的经验之谈
- iOS中容易犯错的知识点
- Java线程同步容易犯错的坑
- 黑马程序员--关于C#方法的注意事项
- android的首进程init
- Qt 滚动区
- 文章4:Nginx进程管理之 ngx_master_process_cycle分析
- 黑马程序员--C语言里的类型转换学习笔记
- 一个关于析构的容易犯错的作用域的程序
- 黑马程序员--详解结构和类的异同
- iOS 开发:真机测试
- 黑马程序员之SQL学习笔记:数据库基础知识点学习总结
- 优秀的NAS不光只有群晖,看看威联通在安全性上如何K掉群晖
- smarty缓存复习代码
- 王远轩:北美求职记
- smarty设置参数
- stem算法