48:深入学习c++(类 使用智能指针需要注意的几个“坑”)

// 一个祼的指针不要用二个shared_ptr管理,unique_ptr;
// 下面是错误例子,一个指针,二个管理,但他们引用各为1,如果其中一个构析了,会导至另一个正在使用的会异常
auto pObj = new Object(1);
ObjectPtr = Obj(pObj);
ObjectPtr = Obj(pObj2);

// 用weakptr打破循环引用,parent 和 child;
// 当需要用类的内部接口中,如果需要将this作为智能指针来使用的话,需要在该类派生自enable_shared_form_this
// 碰到接口转换,想取到this,需要在类内部使用 shared_form_this();

// 使用shared_ptr 作为函数的接口,如果有可能有const shared_ptr&形式

// shared_ptr  weak_ptr 和 祼指针相比,会大很多,并且效率上会有影响,尤其是在 多线程模式下;
  Objectptr obj3(new Object(2));// 智能指针的实现,本身会有一次new,同时我们还需要再new 一次object; 这样子就会耗费二次new
  // 下面就是为了解决,一次new完成例子
  ObjectPtr obj5 = std::make_shared<object>(3);// 这句等价上面的,但能减少一次
  // enable_shared_from_this    shared_from_this() 和构造析构函数一样,某些情况是不能够用出的,会出错
  
  // 某些情况,会出现内存不会降的问题,优其是使用weak_ptr来处理循环引用的问题

发布了4 篇原创文章 · 获赞 0 · 访问量 37

猜你喜欢

转载自blog.csdn.net/u010665493/article/details/104387540
今日推荐