当前位置: 首页 > news >正文

安卓图形网站建设新闻稿件代发平台

安卓图形网站建设,新闻稿件代发平台,网站域名注册时间,那些网站容易做淘宝推广问题描述: 例如: 有个类A和类B,A类包含B类型的shared_ptr成员,B类包含A类型的shared_ptr成员。然后主函数各自创建A类的对象和B类的对象都被shared_ptr管理(引用计数为1)。然后对象之间相互引用时&#x…

问题描述:

例如:

  • 有个类A和类B,A类包含B类型的shared_ptr成员,B类包含A类型的shared_ptr成员。
  • 然后主函数各自创建A类的对象和B类的对象都被shared_ptr管理(引用计数为1)。
  • 然后对象之间相互引用时(引用计数为2),当主函数结束时,对象出作用域销毁后引用计数减1,最后为1,相互引用的引用计数不会归0,导致析构函数不会释放资源,造成内存泄漏。
class B;
class A {
public:std::shared_ptr<B> bPtr;
};
class B {
public:std::shared_ptr<A> aPtr;
};int main() {auto a = std::make_shared<A>();auto b = std::make_shared<B>();a->bPtr = b;b->aPtr = a;// 此时 a 和 b 的引用计数都至少为 1(来自自身的 shared_ptr 管理以及对方的引用),即使超出作用域,引用计数也不会归 0,内存无法释放return 0;
}

解决办法:

在相互引用时,使用weak_ptr就可以解决了,因为weak_ptr不会增加引用计数,只起到观察者的作用。

class B;
class A {
public:std::weak_ptr<B> bPtr; // 改为 weak_ptr
};
class B {
public:std::weak_ptr<A> aPtr; // 改为 weak_ptr
};int main() {auto a = std::make_shared<A>();auto b = std::make_shared<B>();a->bPtr = b;b->aPtr = a;// 当超出作用域时,a 和 b 的引用计数(主要来自 make_shared 创建时的计数)会正常减少,因为 weak_ptr 不增加计数,对象可以正确释放return 0;
}

ps:后续也会出一个share_ptr和weak_ptr底层的原理,帮助大家更深的理解智能指针。

具体应用:

那么循环引用在现实开发场景有什么应用呢,这里举一个游戏的例子帮助大家理解。

比如你有个角色类和装备类,当两个类对象相互引用时,表示角色装备该武器,武器的持有者是该角色,当你没有解决循环引用问题时,就会造成:角色死亡时,武器资源没有释放;武器的持有者已死亡还被持有,不符合游戏规则且内存泄漏。

class Equipment;
class Character {
public:std::string name;std::weak_ptr<Equipment> equippedWeapon;Character(const std::string& n) : name(n) {}
};class Equipment {
public:std::string type;std::weak_ptr<Character> owner;Equipment(const std::string& t) : type(t) {}
};int main() {auto warrior = std::make_shared<Character>("勇士");auto sword = std::make_shared<Equipment>("剑");warrior->equippedWeapon = sword;sword->owner = warrior;return 0;
}

http://www.yayakq.cn/news/454863/

相关文章:

  • 百度 seo排名查询seo推广计划
  • 网站建设的实际价值莱州网页设计
  • 做ktv网站大概多少钱怎么在网站标题做logo
  • 网站建设招标网江西省人社窗口作风建设网站
  • 义乌企业网站搭建首选搜索引擎快速优化排名
  • 网站推广建设西安网站设设
  • 怎么和网站合作推广网站建设与维护模板
  • 柳州网站建设33重庆网站建设seo公司
  • 二手房网站建设书郑州网站关键词排名技术代理
  • 织梦网站自动跳转手机网站百度热门关键词
  • 山东建设银行官网网站自学编程网站免费
  • 上海做网站的公司官网河北邯郸房价
  • 建设网站空间选择网站制作价格范围
  • 石家庄建站公司网站开发程序员 工资
  • 网站建设公司包括哪些板块化工行业网站建设
  • 丰台专业网站建设公司企业网站的cms
  • 网站设计一般包括哪些地推任务网
  • 厦门做手机网站公司工作心得体会简短的
  • 做网站我网站找第三方支付wordpress主题代码分析
  • 深圳网站建设 百业wordpress前台登录按钮
  • 德阳建设公司网站刷题网站怎么做
  • 图片展示网站建设扬中信息发布
  • 无锡网站公司哪家好牡丹江信息网手机版招聘
  • 怎样算网站侵权潜江网站搭建
  • 上海建设行业的资质网站重庆营销网站制作
  • 设计网站公司湖南岚鸿公司上海网站建设开发公
  • 盐城专业做网站的公司哪家好腾讯云的wordpress安装目录
  • 新开的公司做网站多少钱网页设计与制作教程期末考试
  • 厦门网站建设哪家专业网页界面设计招聘
  • sem代运营托管公司Wordpress图片加载优化