第四节 · 意念造山河 · lambda表达式

有时候,标准的内存分配方式不能满足特殊需求,比如需要更高的性能或特定的内存布局。C++ 允许我们自定义内存管理。


operator new 和 operator delete

#include <iostream>
#include <cstdlib>
using namespace std;

class MyClass
{
public:
    int data;
    
    // 自定义 new
    void* operator new(size_t size)
    {
        cout << "Custom new, size: " << size << endl;
        void* p = malloc(size);
        if (!p) throw bad_alloc();
        return p;
    }
    
    // 自定义 delete
    void operator delete(void* p) noexcept
    {
        cout << "Custom delete" << endl;
        free(p);
    }
};

int main()
{
    MyClass* obj = new MyClass();
    obj->data = 42;
    delete obj;
    
    return 0;
}

placement new

在已分配的内存上构造对象。


内存池


allocator - 标准分配器


自定义分配器


RAII - 资源获取即初始化

这是 C++ 最重要的内存管理模式。


内存对齐


避免内存碎片


习题

  • 实现一个简单的对象池,支持分配和回收。

  • 解释 RAII 模式的优点。

  • 什么情况下需要使用 placement new?

Last updated