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

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The GitHub Blog
The GitHub Blog
J
Java Code Geeks
Engineering at Meta
Engineering at Meta
N
Netflix TechBlog - Medium
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
B
Blog RSS Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
有赞技术团队
有赞技术团队
T
Tailwind CSS Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Vercel News
Vercel News
腾讯CDC
博客园 - 聂微东
The Cloudflare Blog
F
Fortinet All Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
Last Week in AI
Last Week in AI
B
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
自定义删除器工作...
自定义删除器工作...
自定义删除器工作...