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

c++内存示例20到地址,用计数,独针

c++内存示例25独针释放,极操作符,比较操作符

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

c++内存示例28交换,构造参数

c++内存示例19共针,分配器

c++内存示例26位置,左移,等号操作符,重置