博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
boost智能指针指定const对象问题
阅读量:5209 次
发布时间:2019-06-14

本文共 1097 字,大约阅读时间需要 3 分钟。

由于非常习惯用const来加强代码的封装性,结果最近遇到了一些问题,顺带研究了一下

以前基本没用过boost的智能指针,后来进了新项目组,引擎里遇到了大量boost的shared_ptr,intrusive_ptr指针,还有weak_ptr。因为遇到过更好用的weak_ptr,所以boost::weak_ptr感觉是个封装不是很好的瘸腿指针(相比起来可能效率高,但是使用起来很麻烦,访问其中的指针变量必须要调用lock()对象,感觉移植性大大减少,而且写起代码来感觉好冗余。。原谅我活在一个徒手用指针自己管理内存的时代),当然这只是顺带一提。

当时的问题是当我希望存储在智能指针里的px是const类型要怎么办。。这里要讲下shared_ptr,intrusive_ptr的区别

shared_ptr修改的是自己的引用计数,如果当内在px指针是常量,不会影响px的常量操作。。

当时有个小疑惑,原理都懂,但是虽然我不用影响px的任何数据,但是当我是最后一个px的拥有者的时候,我总是要析构的吧。这不就改变px了么。不是违背了const的属性么。。。这个时候要怎么办。。我本来以为会编译不过。。但是写了测试函数居然是正常的。。

结果谷歌了一下,居然发现一件开发C++这么久以来都不知道的事情。。原贴在。C++的语法是支持析构常量指针的。。

{     const Foo f;     // use it} // destructor called here//If destructors could not be called on const objects we could not use const objects at all.(如果析构不能被常量对象调用,那我们也不能使用常量对象了)

这种解释倒是很容易接受。。如果shared_ptr是因为如此可以支持常量对象指针的。。

 

 intrusive_ptr是侵入式指针,就是字面上的意思,修改的是px本身的引用计数,当px是常量的时候,我估计是不能编译通过的。

使用intrusive_ptr必须提供intrusive_ptr_add_ref与intrusive_ptr_release函数用来改变引用计数,如果想使用instrusive_ptr且装入const指针,px自带的引用计数的成员变量必须标为mutable来进行识别,并在const函数中进行修改

(刚看到文章,提到intrusive_ptr的使用时机,顺便贴过来 )

 

转载于:https://www.cnblogs.com/kongxian/p/4292608.html

你可能感兴趣的文章
细说WebSocket - Node篇
查看>>
【pwnable.kr】 flag
查看>>
1014 装箱问题——http://codevs.cn/problem/1014/
查看>>
poj 3177 边双联通 **
查看>>
java.lang.UnsupportedOperationException
查看>>
java-斐波那契数列的解法
查看>>
rackup工具
查看>>
Linux operating system (Ubuntu) 学习-1
查看>>
ajax-原生写法步骤
查看>>
.Net语言 APP开发平台——Smobiler学习日志:如何在手机上实现饼图图表
查看>>
svn完整备份迁移
查看>>
Python字典实现分析
查看>>
jenkins+testNG
查看>>
Java自定义范型的应用技巧
查看>>
[洛谷1485] 火枪打怪
查看>>
白话经典算法系列之六 快速排序 快速搞定
查看>>
错了:用流量能够放肆,有wifi则要节制
查看>>
CSS渐变字体、镂空字体、input框提示信息颜色、给图片加上内阴影、3/4圆
查看>>
https://zhidao.baidu.com/question/362784520674844572.html
查看>>
第八周
查看>>