new/delete分两种,一种是全局的,另一种是针对特定类的

#include <iostream>
using namespace std;

struct foo
{
    explicit foo( int val=0 ) : val_(val)
    {
        cout << "(" << val_ << ")";
    }
    ~foo()
    {
        cout << "<" << val_ << ">";
    }
    int val_;

    static void* operator new[]( size_t size ); // 类形式的new/delete
    static void operator delete[]( void* raw );
};

char buf[1000];

void* foo::operator new[]( size_t size )
{
    //如果不是本类的,而是派生类的,要明确拒绝之
   
//    return ::operator new(size);

    if( 0 == size ) // 须要注意
        size = 1;

    //分配size字节内存;
   
//if(分配成功)
   
//    return 指向内存的指针;
    return buf; // 我只是做个演示

    throw std::bad_alloc();
}

void foo::operator delete[]( void* raw )
{
    //如果不是本类的,而是派生类的,要明确拒绝之
   
//{
   
//    ::operator delete(raw);
   
//    return;
   
//}

    if( 0 == raw ) // 须要注意
        return;

    // 释放分配的内存
   
// 我只是做个演示
}

int main()
{
    delete[] new foo[2];

    return 0;
}

 

关于new和delete以及new[] 和delete[]的相关用法,仍需在实践中不断体味。