|
|
1
35
原因很简单:如果deleter是空的(因而是无状态的)类型(例如
|
|
|
2
12
让你困惑的关键短语是“删除者”
可以
但存储类型为“”的删除器没有意义
通常,无状态删除程序不需要存储,因为您可以根据需要创建它们。 |
|
|
3
11
Angew's answer 非常彻底地解释了发生的事情。 对于那些好奇的人来说
专门用于空删除程序并利用 empty base optimization 。 |
|
|
4
1
简介: 唯一\u ptr 可以 引入一些小的开销,但这并不是因为deleter,而是因为当您离开它时,值必须设置为null,如果您使用的是原始指针,那么旧指针可能会处于容易出现错误但合法的状态,它仍然指向它之前指向的位置。显然,智能优化器可以进行优化,但不能保证。 返回删除程序: 其他答案是正确的,但要详细说明。因此,这里是简化版,没有提及EBO或其他复杂术语。 如果deleter为空(没有状态),则不需要将其保存在unique\u ptr中。如果你需要它,你可以在需要的时候构建它。您只需要知道deleter类型(这是unique\u ptr的模板参数之一)。 例如,考虑下面的代码,然后还演示了按需创建无状态对象的简单过程。
|
|
|
santa · 如何在c中返回唯一所有权++ 7 年前 |
|
|
Paco G · C++unique\u ptr的行为就像复制值一样 7 年前 |
|
|
ciyo · 将唯一指针初始化为类成员 7 年前 |
|
|
Chen · 使用初始化列表的向量 8 年前 |