c++ 构造函数的异常处理机制,懂得进来拿分!

莫_问 2012-09-19 03:11:01


struct T
{
static void* operator new(size_t, unsigned short nTypes, unsigned short nUnitSize)
{return NULL;}
static void operator delete(void* p, size_t){}
T ( int x){};
};

int main()
{
T* t= new(1, 2)T(0);
return 0;
}

编译时会出现问题下列waring,求解决方案

“void *T::operator new(size_t,unsigned short,unsigned short)”: 未找到匹配的删除运算符;如果初始化引发异常,则不会释放内存

顺便问下,c++ 构造函数抛出异常时,如何处理?

...全文
207 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2012-09-19
  • 打赏
  • 举报
回复
你自己的只有在 抛出异常的时候才会调用到。没事就不要重载这两个函数玩吧。
莫_问 2012-09-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

使用与你的operator new相匹配的operator delete
比如你可以把delete的参数改为(void* p,unsigned short nTypes, unsigned short nUnitSize)


构造函数应当自行保证异常安全,抛到外面没法处理,内部可以诸如auto_ptr等可析构的智能类型,否则可能会try catch满天飞,另外可以把一些初始化的操作……
[/Quote]


顺便问下:

T* p = new(NULL, 10)T;

delete p; 删除对象时,调用析构函数之后,如何让delete调用我自己的
static void operator delete(void* p,unsigned short nTypes, unsigned short nUnitSize ){}
函数,而不是系统默认的delete 操作

Coder_Y_Jao 2012-09-19
  • 打赏
  • 举报
回复
使用与你的operator new相匹配的operator delete
比如你可以把delete的参数改为(void* p,unsigned short nTypes, unsigned short nUnitSize)


构造函数应当自行保证异常安全,抛到外面没法处理,内部可以诸如auto_ptr等可析构的智能类型,否则可能会try catch满天飞,另外可以把一些初始化的操作放在init里,至少可以构造出完整对象给析构函数一个运行的机会。

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧