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

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