c++_10: 异常处理

抛出异常

  • 创建一个包含错误信息的对象,并出异常
  • throw

捕获异常

try

  • 解决throw的抛出的异常
  • 若无try,则程序抛出throw后会退出

catch

auto_ptr

http://www.cnblogs.com/qytan36/archive/2010/06/28/1766555.html

std::auto_ptr pa(new ClassA);
* auto_ptr的实现原理其实就是RAII,在构造的时候获取资源,在析构的时候释放资源,并进行相关指针操作的重载,使用起来就像普通的指针。

内存泄露

assert断言

对象计数

方法:在对象构造时计数++,析构时–,每隔一段时间打印对象的数量

优点:没有性能开销,几乎不占用额外内存。定位结果精确。

缺点:侵入式方法,需修改现有代码,而且对于第三方库、STL容器、脚本泄漏等因无法修改代码而无法定位。

重载new和delete

方法:重载new/delete,记录分配点(甚至是调用堆栈),定期打印。

优点:没有看出

缺点:侵入式方法,需将头文件加入到大量源文件的头部,以确保重载的宏能够覆盖所有的new/delete。记录分配点需要加锁(如果你的程序是多线程),而且记录分配要占用大量内存(也是占用的程序内存)。

windows系统下

http://www.cnblogs.com/skynet/archive/2011/02/20/1959162.html

内存分配要通过CRT在运行时实现,只要在分配内存和释放内存时分别做好记录,程序结束时对比分配内存和释放内存的记录就可以确定是不是有内存泄漏。

你可能感兴趣的:(c++_10: 异常处理)