惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
Last Week in AI
Last Week in AI
IT之家
IT之家
A
About on SuperTechFans
M
MIT News - Artificial intelligence
Y
Y Combinator Blog
T
The Blog of Author Tim Ferriss
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
博客园 - 【当耐特】
V
Visual Studio Blog
Microsoft Security Blog
Microsoft Security Blog
博客园_首页
aimingoo的专栏
aimingoo的专栏
The Cloudflare Blog
Vercel News
Vercel News
博客园 - Franky
有赞技术团队
有赞技术团队
B
Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
GbyAI
GbyAI
量子位
云风的 BLOG
云风的 BLOG
T
Tailwind CSS Blog

博客园 - double64

C# 字符串转换 C# 遍历删除空文件夹 MFC 单文档无边框最大化全屏 MFC 单文档去掉菜单栏 MFC 对话框去边框最大化全屏 C++ 动态数组 C++ 安全的拷贝赋值(Copy-and-Swap 惯用法) C++ 基类派生类的 static_cast 和 dynamic_cast 转换的简单测试 visual studio 的 snippet 代码片段模板样式 Windows 右键管理官方小程序Autoruns C++ 结合 enum 按位与或组合检测枚举项 两个用来写 CLI - Command-Line Interface 的命令解析库 enum class 类型转换 int 微软输入法中如何输出当前时间 音程知识 C++ 模板引用参数的各种情况 英语 12 种时态 Qt 手动添加 Q_OBJECT 需要添加的地方 C# WPF 绑定 ObservableObject 实现 INotifyPropertyChanged 接口 C++ 标准库 copy_if C++ lambda 和 bind 何时优先使用 Windows 下的 Qt 中 min max 函数冲突 C++ RVO 或 NRVO 可能触发的条件 C++ std::unique_ptr 和 std::shared_ptr 都支持自定义删除器(deleter) C++ 智能指针和动态数组 std::vector 插入另一个 vector 的范围元素 Qt tableWidget QTableWidget 常用一些属性设置 C++ 内部类(嵌套类)是可以访问外部类的私有保护成员的 C++ 宏展开顺序 C++ std::round() 四舍五入
std::unique_ptr 当删除器类型为 无状态的时构造可以不用传删...
double64 · 2026-05-13 · via 博客园 - double64

当删除器类型 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
自定义删除器工作...
自定义删除器工作...
自定义删除器工作...