pizzx
C++博客
首页
新随笔
联系
聚合
管理
随笔 - 21 文章 - 0 trackbacks - 0
<
2014年7月
>
日
一
二
三
四
五
六
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
c++/boost(21)
mongodb
随笔档案
2014年8月 (5)
2014年7月 (9)
2014年6月 (6)
2014年5月 (1)
文章分类
C/C++
LINUX
网络编程
搜索
最新评论
阅读排行榜
1. glog日志开源库使用小结(10301)
2. boost pool实现详解(5273)
3. boost noncopyable实现禁止类拷贝(3874)
4. float 大小比较(2900)
5. boost::circular_buffer的push_back分析(2651)
评论排行榜
1. boost::circular_buffer的push_back分析(0)
2. muduo网络库的一点小结 (0)
3. glog日志开源库使用小结(0)
4. log4cpp自带例子程序注解(0)
5. 对象申请释放内存池测试(0)
get weakptr point from this
和enable_shared_from_this刚好相反,
http://www.cppblog.com/pizzx/archive/2014/07/02/207477.html
内部持有shared_ptr作为成员变量,生命周期和类相同,通过weak_ptr可以判断当前对象生命周期是否已经结束(可以在其他线程判断,线程安全)。
#include
<
iostream
>
#include
<
boost
/
weak_ptr.hpp
>
#include
<
boost
/
shared_ptr.hpp
>
#include
<
vector
>
using
namespace
std;
using
namespace
boost;
class
null_deleter
{
public
:
void
operator
()(
void
*
)
{}
}
;
class
X
{
private
:
shared_ptr
<
X
>
this_;
int
i_;
public
:
explicit
X(
int
i): this_(
this
, null_deleter()), i_(i)
{
}
//
repeat in all constructors (including the copy constructor!)
X(X
const
&
rhs): this_(
this
, null_deleter()), i_(rhs.i_)
{
}
//
do not forget to not assign this_ in the copy assignment
X
&
operator
=
(X
const
&
rhs)
{
i_
=
rhs.i_;
}
weak_ptr
<
X
>
get_weak_ptr()
const
{
return
this_; }
}
;
int
main()
{
vector
<
weak_ptr
<
X
>
>
m_vcwptr;
{
X x(
1
);
}
{
shared_ptr
<
X
>
x(
new
X(
1
));
m_vcwptr.push_back(x
->
get_weak_ptr());
std::cout
<<
"
x use count:
"
<<
x.use_count()
<<
"
\n
"
;
weak_ptr
<
X
>
xinscope
=
m_vcwptr[
0
];
if
(
!
xinscope.
lock
())
std::cout
<<
"
xy is already expired
"
<<
"
\n
"
;
else
std::cout
<<
"
xy is exist
"
<<
"
\n
"
;
}
weak_ptr
<
X
>
xy
=
m_vcwptr[
0
];
if
(
!
xy.
lock
())
std::cout
<<
"
xy is already expired
"
<<
"
\n
"
;
}
posted on 2014-07-06 21:11
pizzx
阅读(344)
评论(0)
编辑
收藏
引用
所属分类:
c++/boost
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
c11 ravlue test example 1
float 大小比较
boost noncopyable实现禁止类拷贝
c++安全scope作用域释放资源二
operator new总结
observer模式
float和int转换拾入分析
vtable ptr解析
get weakptr point from this
boost bind 引用计数生命周期
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理