主页 > 其他  > 

C++智能指针


分类 C++智能指针有share_ptr, unique_ptr, weak_ptr, auto_ptr, 其中auto_ptr是C++98中的用法,C++11已经弃用了。weak_ptr是为了配合share_ptr工作而引入的智能指针,其没有共享资源,其构造也不会引起指针引用计数的增加。weak_ptr主要是防止share_ptr出现循环引用和内存泄漏的问题。

share_ptr和unique_ptr的联系和区别 联系:

1.都是智能指针:区别于普通指针,能利用类的特性,避免内存泄漏问题;

2.RAII(资源获取即初始化):它们基于RAII原则,确保在离开作用域时释放相关资源,无需手动调用delete;

区别:

1.所有权管理不同:unique_ptr不允许多指针共享资源,同一时刻只能有一个unique_ptr指向给定对象;而多个share_ptr可以共享资源,可以访问同一个共享内存。share_ptr通过引用计数来管理资源的生命周期。当最后一个shared_ptr销毁时,内存才会被释放;

2.性能开销:unique_ptr没有引用计数的开销,比share_ptr更轻量级;share_ptr需要维护引用计数;

3.安全性:unique_ptr不会出现循环引用问题,但share_ptr可能出现循环引用和内存泄漏问题,share_ptr必要时得和weak_ptr一起使用。

share_ptr的特性 1.多种重载:解引用运算符重载(解引用运算符*和箭头运算符->),比较运算符重载(相等运算符==和不等运算符!=),bool运算符重载,赋值操作符重载(允许将一个std::shared_ptr赋值给另一个,并处理引用计数的递增和递减),这些重载使得share_ptr具备普通指针的性质;

2.线程安全

同一个share_ptr被多个线程读是安全,但写不安全的。只有共享引用计数的不同share_ptr被多个线程写才是安全的。

标签:

C++智能指针由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“C++智能指针