C++的内存管理太难了

鲁迅

基类析构函数为非virtual

基类的析构函数如果是非virtual的,那么上转型时,基类的析构函数不会被覆盖。这样子,属于子类的部分在析构时就不会会删除,导致内存泄漏。

依赖用户释放对象

依赖用户使用delete来释放内存,如果在释放过程前抛出异常,那么这部分的内存就不会被释放,导致内存泄漏。

一个足够鲁棒的做法是,返回一个shared_ptr来管理原生对象。shared_ptr是个神奇的玩意,但你记得要为对象创建合适的shared_ptr。

New 和 Delete 不对称

New 一组对象,却只delete一个对象,这样不内存泄漏真的没天理

未定义复制构造函数而成员中有指针变量

这会导致调用默认复制构造函数然后使得同一个地址被两个指针所指(复制和被复制对象的指针变量),导致同一位置的内存被释放两次。

你以为大家看不出这是《effective C++》的书摘吗?