c++内存示例29独针
Posted 周三石
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++内存示例29独针相关的知识,希望对你有一定的参考价值。
#包含 <io流>
#包含 <向量>
#包含 <内存>
#包含 <c标io>
#包含 <文件流>
#包含 <c断定>
#包含 <函数>
构 B {
虚 空 条() { 输出 << "B::条\n"; }
虚 ~B() = 默认;
};
构 D : B
{
D() { 输出 << "D::D\n"; }
~D() { 输出 << "D::~D\n"; }
空 条() 盖 { 输出 << "D::条\n"; }
};
// 消费 独针 的函数能以值或以右值引用接收它
标::独针<D> 通过(标::独针<D> p)
{
p->条();
中 p;
}
空 关闭文件(文件* 浮点) { f关闭(浮点); }
整 主()
{
输出 << "独特 所有权 语义学 示例\n";
{
动 p = 造独<D>(); // p 是占有 D 的 独针
动 q = 通过(标::移动(p));
断定(!p); // 现在 p 不占有任何内容并保有空指针
q->条(); // 而 q 占有 D 对象
} // ~D 调用于此
输出 << "运行时 多态 示例\n";
{
标::独针<B> p = 造独<D>(); // p 是占有 D 的 独针
// 作为指向基类的指针
p->条(); // 虚派发
向量<标::独针<B>> v; // 独针 能存储于容器
v.压后(造独<D>());
v.压后(标::移动(p));
v.原后(新 D);
对(动& p: v) p->条(); // 虚派发
} // ~D 调用 3 乘
输出 << "自定义 删除器 示例\n";
出文件流("示例.文本") << 'x'; // 准备要读的文件
{
标::独针<文件, 空 (*)(文件*) > 浮点(打开文件("示例.文本", "r"),
关闭文件);
如(浮点) // 打开文件 可以打开失败;该情况下 浮点 保有空指针
输出 << (符)文件取符(浮点.取()) << '\n';
} // f关闭() 调用于此,但仅若 文件* 不是空指针
// (即 打开文件 成功)
输出 << "自定义 λ-式 删除器 示例\n";
{
标::独针<D, 函数<空(D*)>> p(新 D, [](D* 针)
{
输出 << "消灭 从 a 自定义 删除器...\n";
删 针;
}); // p 占有 D
p->条();
} // 调用上述 λ 并销毁 D
输出 << "数组 表单 of 独针 示例\n";
{
标::独针<D[]> p{新 D[3]};
} // 调用 ~D 3 次
}
独特 所有权 语义学 示例
D::D
D::条
D::条
D::~D
运行时 多态 示例
D::D
D::条
D::D
D::D
D::条
D::条
D::条
D::~D
D::~D
D::~D
自定义 删除器 示例
x
自定义 λ-式 删除器 示例
D::D
D::条
消灭 从 a 自定义 删除器...
D::~D
数组 表单 of 独针 示例
D::D
D::D
D::D
D::~D
D::~D
D::~D
以上是关于c++内存示例29独针的主要内容,如果未能解决你的问题,请参考以下文章