C++异常中生命周期回顾
来源:互联网 发布:js 公式编辑器 编辑:程序博客网 时间:2024/05/20 10:56
#include<iostream>using namespace std;class BadSrcType{public:BadSrcType(){cout << "BadSrcType构造函数\n";}BadSrcType(const BadSrcType &obj){cout << "BadSrcType拷贝构造函数\n";}~BadSrcType(){cout << "BadSrcType析构函数\n";}};class BadDestType{public:BadDestType(){cout << "BadDestTypee构造函数\n";}BadDestType(const BadDestType &obj){cout << "BadDestType拷贝构造函数\n";}~BadDestType(){cout << "BadDestType析构函数\n";}};class BadProcessType{public:BadProcessType(){cout << "BadProcessType构造函数\n";}BadProcessType(const BadProcessType &obj){cout << "BadProcessType拷贝构造函数\n";}~BadProcessType(){cout << "BadProcessType析构函数\n";}};//throw 类对象 类型异常void my_strcpy(char *to, char *from){if (from == nullptr){//抛异常时会不会产生匿名对象?throw BadSrcType();}if (to == nullptr){throw BadDestType();}if (*from == 'c'){cout << "开始BadProcessType类型异常\n";throw new BadProcessType;}while (*from != '\0'){*to = *from;to++;from++;}*to = '\0';return;}void main(){int ret = 0;char buf1[] = "cbcdef";char buf2[1024] = { 0 };try{my_strcpy(buf2, buf1);}catch (BadSrcType e)//结论1:抛出的时候不管产生的是否是匿名对象,//这里都是调用拷贝构造函数,将匿名对象拷贝给了e,也就是仍然遵循函数调用的规则{cout << "BadSrcType类型异常" << endl;}catch (BadDestType e){cout << "BadDestType类型异常" << endl;}//结论2:使用引用来接的话,会使throw抛出时产生的那个对象,不会调用拷贝构造函数/*catch (BadProcessType &e){ cout << "BadProcessType类型异常" << endl;}*///结论3:指针可以和元素或者引用写在一块,但是元素不能和引用写在一块catch (BadProcessType *e){//如果抛出的时候是&(BadProcessType()),虽然可以接受到//但是会出现野指针现象,因为原来的已经被释放了//抛出的是new BadProcessType这种则因为是动态管理//内存,而不会出现野指针现象cout << "BadProcessType类型异常" << endl;delete e;}catch (...){cout << "未知类型异常" << endl;}cout << buf2;getchar();return;}这里引用和元素写在一起可能会出错,而指针则可以分别和二者写在一起,因为指针和二者的类型是不一样的,而引用和元素则不然。
0 0
- C++异常中生命周期回顾
- Activity 生命周期回顾 onSaveInstanceState()
- Ogre异常处理回顾
- 类的生命周期回顾篇
- 对象的生命周期回顾篇
- 回顾ios中UIViewController的生命周期及ios的执行顺序
- C#中常见异常类
- Objective-C中异常处理
- C、C++、Java回顾
- 回顾c语言中声明和定义的区别
- 异常安全-对象生命周期
- 回顾struts2--异常信息总结
- Java 回顾笔记_异常
- C#中的自定义异常回顾
- Hadoop回顾--MapReduce异常处理
- 课后知识点回顾四 异常
- 小回顾-异常以及异常处理机制
- Java多线程回顾2:线程的生命周期
- UML类图关系
- 蓝懿iOS 技术交流和心得分享16.1.2
- ChiMerge 算法
- 设计模式(13)-桥接模式
- 图的存储以及深度优先和广度优先
- C++异常中生命周期回顾
- 我的archlinux软件列表
- C语言+鞍点
- Container With Most Water
- 适配器模式
- C# 颜色表
- 【Java】java集合框架
- 黑马程序员——java基础之多态
- 图像处理与计算机视觉:基础,经典以及最近发展(5)计算机视觉