|
|
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的模板参数之一)。 例如,考虑下面的代码,然后还演示了按需创建无状态对象的简单过程。
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |