C++内存管理相关

1.定位new: new (addr) 类型。
通过这种方式,可实现 内存分配与对象构造的分离

2.利用标准库模板allocator<T>,实现对象构造和内存分配的分离(如预先分配存储区但不构造),析构和内存释放的分离(如pop_back),一种可行的实现可能是利用上面的 定位new。

3.new  和delete 的定制,类可以通过new, delete的操作符重载来接手内存的管理,如可以预先分配内存,从其中分配内存,动态内存也释放回其中。 
static void* operator new (size_t);
static void operator delete(void *); 或
static void operator delete(void *, size_t);//在继承关系的类中
在具有动态类型的时候,通过定义虚析构函数,通过基类指针来析构派生类对象才是可行的。

4.delete 单个对象 delete[] 对象数组,如果delete 对象数组,那么只会析构第一个数组对象,后面均不会析构。
 
5.垃圾回收:智能指针(引用计数)的开销最小,但 无法解决循环引用问题。可以通过接手内存分配与管理来实现对象的标记与清除, 如何接手内存分配与管理,分别对待? 毕竟有些内存分配可能无法接收,如内置数据的分配,外部库的对象内存分配策略。这种方法开销大。总结:由于C++没能在语言层面实现垃圾回收,导致要实现完全的垃圾回收很难,几乎不可能。
  http://techsingular.net/?p=229 (C++与垃圾回收,C++)
  http://www.2cto.com/kf/201110/108419.html (C++中几种经典的垃圾回收算法)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值