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共针的主要内容,如果未能解决你的问题,请参考以下文章

c++内存示例15造共针,显式推导,分配共针,取,操作符

c++内存示例17转换指针,重置上

c++内存示例08从本共享

c++内存示例05默认删,消灭

c++内存示例07允许从本共享

c++内存示例18物主在前,重置下