异常对象的传递与复制构造函数
来源:互联网 发布:scrivener mac 中文 编辑:程序博客网 时间:2024/05/21 00:19
今天搞了一个异常类,有一个char *desc 成员,是在对象创建时动态分配的.在外部的catch语句中
总是被释放掉.而另一个成员 int code 确是正确的.
后来经过研究发现,是缺少一个复制构造函数,加了红色部分就ok了.异常对象在throw语句到catch的
传递过程中要进行对象复制,像有指针成员这种情况,如果没有自己定义的复制构造函数,复制的对象
和throw语句的对象指针成员指向同一块内存.默认的复制过程完成后throw语句会调用析构函数会把
内存释放掉,这样catch语言中的异常对象指针成员就会出错了. 自定义一个复制构造函数如下就可以避免
这种情况.
/************************************************************************/
/* 异常定义 */
/************************************************************************/
#ifndef _PDF_CEXCEPTION_
#define _PDF_CEXCEPTION_
#define PE_ENCRIPTED 0x01
#define PE_PARAMETER_ERROR 0x02
#define PE_PARSE_ERROR 0x03
class CPdfException
{
public:
CPdfException(char *except_desc,int except_code );
CPdfException(CPdfException &);
~CPdfException();
void debug_print();
protected:
private:
char *desc;
int code;
};
/************************************************************************
* 异常实现
************************************************************************/
#include <string.h>
#include <stdio.h>
#include "CPdfException.h"
CPdfException::CPdfException(char *except_desc,int except_code )
{
int len = strlen(except_desc);
desc = new char[len+1];
strcpy(desc,except_desc);
code = except_code;
}
CPdfException::CPdfException(CPdfException &s)
:desc(new char[strlen(s.desc)+1])
{
strcpy(desc,s.desc);
code = s.code;
}
CPdfException::~CPdfException()
{
if(desc)
delete desc;
};
void CPdfException::debug_print()
{
printf("Exception code %d at function %s./n",code,desc);
}
- 异常对象的传递与复制构造函数
- 复制构造函数与禁止复制即函数值传递的原理
- C++对象模型之复制构造函数的构造操作
- C++对象模型-复制构造函数的构造操作
- 复制构造函数的参数能否采用值传递
- 复制构造函数值传递导致的死循环
- C++中类的构造函数与复制构造函数
- 构造函数和复制构造函数的理解与应用
- 复制构造函数与普通构造函数的区别
- 对象的赋值、对象的复制(拷贝构造函数)
- C++的对象复制构造函数与赋值操作符重载的区别小结
- 正确地复制对象--oeprator=与copy构造函数
- C++类对象之间复制,拷贝构造函数的作用,深拷贝与浅拷贝
- 复制构造函数与赋值构造函数
- 复制构造函数与赋值构造函数
- 复制构造函数与拷贝构造函数
- 构造函数与复制构造函数
- 关于构造函数与复制构造函数
- Become An Xcoder by CocoaLab
- 对网页进行简繁字体转换的简单方法
- 用.NET开发MSN聊天机器人
- 互联网企业管理 IT业务主要呈现三大特点
- Detours v2.1 by Microsoft Research
- 异常对象的传递与复制构造函数
- Array和ArrayList的异同点
- showModalDialog和showModelessDialog使用心得
- 调试javascript的好方法
- 动态sql语句基本语法
- 开发基于ASP.NET WebService的图片验证码服务
- 开发TTS产品就是个力气活
- 如何选择Web开发框架
- 侵入远程的代码也写好了