首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++ 构造函数的错误处理机制,懂得进来拿分

2012-09-24 
c++ 构造函数的异常处理机制,懂得进来拿分!C/C++ codestruct T{static void* operator new(size_t, unsign

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

C/C++ code
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,求解决方案
C# code
“void *T::operator new(size_t,unsigned short,unsigned short)”: 未找到匹配的删除运算符;如果初始化引发异常,则不会释放内存

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



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


构造函数应当自行保证异常安全,抛到外面没法处理,内部可以诸如auto_ptr等可析构的智能类型,否则可能会try catch满天飞,另外可以把一些初始化的操作放在init里,至少可以构造出完整对象给析构函数一个运行的机会。
[解决办法]
你自己的只有在 抛出异常的时候才会调用到。没事就不要重载这两个函数玩吧。

热点排行