读书人

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

发布时间: 2012-09-24 13:49:42 作者: rapoo

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里,至少可以构造出完整对象给析构函数一个运行的机会。
[解决办法]
你自己的只有在 抛出异常的时候才会调用到。没事就不要重载这两个函数玩吧。

读书人网 >C++

热点推荐