大佬教程收集整理的这篇文章主要介绍了c – 共享指针双删除,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
int *a = new int(2); std::shared_ptr<int> b(a); std::shared_ptr<int> c(a);
你所做的就是创建两个独立的智能指针,每个指针都认为它拥有底层int的独占所有权.他们不了解彼此的存在,他们不会互相交谈.因此,当它们超出范围时,两个指针都会删除底层资源,结果显而易见.
创建shared_ptr时,它会创建一种“管理对象”,负责资源的生命周期.复制shared_ptr时,两个副本都引用相同的管理对象.管理对象会跟踪指向此资源的shared_ptr实例的数量. int *本身没有这样的“管理对象”,因此复制它不会跟踪引用.
这是对代码的最小重写:
// incidentally,"make_shared" is the best way to do this,but I'll leave your // original codE intact for Now. int *a = new int(2); std::shared_ptr<int> b(a); std::shared_ptr<int> c = b;
现在,它们都引用相同的底层管理对象.当每个shared_ptr被销毁时,int *上的引用数量减少,并且当最后一个引用进入时,对象将被删除.
以上是大佬教程为你收集整理的c – 共享指针双删除全部内容,希望文章能够帮你解决c – 共享指针双删除所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。