c++知识系列:new、operator new、placement new

总结:

operator new

    三种形式(http://www.cplusplus.com/reference/new/operator%20new/)

    throwing (1)    
        void* operator new (std::size_t size) throw (std::bad_alloc);
    nothrow (2) 
        void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) throw();
    placement (3)   
        void* operator new (std::size_t size, void* ptr) throw();

placement new

    placement new是重载operator new的一个标准、全局的版本,通常很少用到它。

    placement new 原型void *operator new( size_t, void *p ) throw() { return p; }

    operator new就像operator+一样,是可以重载的,但是不能在全局对原型为void operator new(size_t size)这个原型进行重载,一般只能在类中进行重载。

    placement new**允许你在一个已经分配好的内存中(栈或堆中)构造一个新的对象

 

operator new重载的作用:

    运用于调试,例如#define new new(__FILE__, __LINE__),这样我们可以输出文件名和行号

    内存池优化,一次性分配一块大的内存作为内存池,重复利用该内存。

    STL中的new,它将对象的空间分配和构造分离开来,给STL容器提供了更加灵活的接口

参考:

    C++ 内存分配(new,operator new)详解

    [C++]内存管理器--谈论如何自定义内存分配机制

你可能感兴趣的:(C++)