























当删除器类型 DelIntVar 是无状态的(没有成员变量、没有虚函数)时,std::unique_ptr 会使用空基类优化(EBO),不需要在构造时传入删除器实例。
// 空基类
struct DelIntVar
{
void operator()(int *var) const
{
std::cout << "自定义删除器工作..." << '\n';
delete var;
}
// 没有成员变量 → 无状态
};
int main()
{
DelIntVar delObj;
{
std::unique_ptr<int, DelIntVar> myInt(new int(100)); // 这里可以不用传 删除器对象。相当于默认构造
std::cout << *myInt << std::endl;
std::unique_ptr<int, DelIntVar> myInt2(new int(200), delObj); // 可以传对象,相当于拷贝构造
std::cout << *myInt2 << std::endl;
std::unique_ptr<int, DelIntVar> myInt3(new int(300));
std::cout << *myInt2 << std::endl;
}
getchar();
return 0;
}
输出:
100
200
200
自定义删除器工作...
自定义删除器工作...
自定义删除器工作...
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。