make_shared
传统 shared_ptr构造的缺陷
-
资源的开辟和 引用计数的开辟是 分离的
-
-
导致的问题:
- 当 new int(10),失败时 --》还会 构造 引用计数,但又不会 delete ,导致 内存泄露!!
make_shared 的 优点
-
使 对象的构造和 引用计数的构造在 一起
-
优点:
- 内存分配效率变高了 : 内存只需要分配一次
- 避免了资源泄漏的风险
make_shared 的 缺点
-
make_shared 无法自定义删除器
-
make_shared 会导致 资源延迟释放:
-
-
当 没有shared_ptr 指向 资源时,假如 还有 weak_ptr指向 该对象,则不会delete --》 因为 weak_ptr 需要使用这块空间
-
但 是 假如是 shared_ptr 开辟的空间,资源和 引用计数在内存上是分离的,在没有shared_ptr 指向 资源时,就可以delete掉该空间了!!
-