![]() |
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的模板参数之一)。 例如,考虑下面的代码,然后还演示了按需创建无状态对象的简单过程。
|
|
user6421810 · C++映射未正确插入 9 年前 |
![]() |
hyit · eclipse无法识别std::stoi 9 年前 |
![]() |
leon · C++标准容器和C中的STL容器++ 10 年前 |
![]() |
clstaudt · Cython是否支持C++11容器? 11 年前 |
![]() |
Nick · C++标准库是否定义了pi? 12 年前 |