c++ 构造函数的错误处理机制,懂得进来拿分
c++ 构造函数的异常处理机制,懂得进来拿分!
编译时会出现问题下列waring,求解决方案
顺便问下,c++ 构造函数抛出异常时,如何处理?
------解决方案--------------------
使用与你的operator new相匹配的operator delete
比如你可以把delete的参数改为(void* p,unsigned short nTypes, unsigned short nUnitSize)
构造函数应当自行保证异常安全,抛到外面没法处理,内部可以诸如auto_ptr等可析构的智能类型,否则可能会try catch满天飞,另外可以把一些初始化的操作放在init里,至少可以构造出完整对象给析构函数一个运行的机会。
------解决方案--------------------
你自己的只有在 抛出异常的时候才会调用到。没事就不要重载这两个函数玩吧。
- 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里,至少可以构造出完整对象给析构函数一个运行的机会。
------解决方案--------------------
你自己的只有在 抛出异常的时候才会调用到。没事就不要重载这两个函数玩吧。