c++内存示例21共针
Posted 周三石
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++内存示例21共针相关的知识,希望对你有一定的参考价值。
#包含 <io流>
#包含 <内存>
#包含 <线程>
#包含 <时间>
#包含 <互斥锁>
构 基
{
基() { 输出 << " 基::基()\n"; }
// 注意:此处非虚析构函数 好
~基() { 输出 << " 基::~基()\n"; }
};
构 继承: 公 基
{
继承() { 输出 << " 继承::继承()\n"; }
~继承() { 输出 << " 继承::~继承()\n"; }
};
空 线程(标::共针<基> p)
{
时间::秒(1));
标::共针<基> lp = p; // 线程安全,虽然自增共享的 用计数
{
静 互斥锁 io互斥锁;
锁警卫<互斥锁> lk(io互斥锁);
输出 << "本地 指针 在 a 线程:\n"
<< " lp.取() = " << lp.取()
<< ", lp.用计数() = " << lp.用计数() << '\n';
}
}
整 主()
{
标::共针<基> p = 造共<继承>();
输出 << "创建 a 共享 继承 (为 a 指针 到 基)\n"
<< " p.取() = " << p.取()
<< ", p.用计数() = " << p.用计数() << '\n';
线程 t1(线程, p), t2(线程, p), t3(线程, p);
p.重置(); // 从 主 释放所有权
输出 << "共享 所有权 之间 3 线程 和 释放\n"
<< "所有权 从 主:\n"
<< " p.取() = " << p.取()
<< ", p.用计数() = " << p.用计数() << '\n';
t1.合并(); t2.合并(); t3.合并();
输出 << "所有 线程 完成, 这 上个 一 删 继承\n";
}
基::基()
继承::继承()
创建 a 共享 继承 (为 a 指针 到 基)
p.取() = 0xc99028, p.用计数() = 1
共享 所有权 之间 3 线程 和 释放
所有权 从 主:
p.取() = (无效), p.用计数() = 0
本地 指针 在 a 线程:
lp.取() = 0xc99028, lp.用计数() = 3
本地 指针 在 a 线程:
lp.取() = 0xc99028, lp.用计数() = 4
本地 指针 在 a 线程:
lp.取() = 0xc99028, lp.用计数() = 2
继承::~继承()
基::~基()
所有 线程 完成, 这 上个 一 删 继承
以上是关于c++内存示例21共针的主要内容,如果未能解决你的问题,请参考以下文章