模拟new[]/delete[]申请和释放

实现NEW_ARRAY/DELETE_ARRAY宏,模拟new[]/delete[]申请和释放数组

//NEW宏
#define NEW(ptr,type)                                 \
{                                                     \
    do{                                               \
        ptr = (type*) operator new(sizeof(type));     \
        new(ptr)type;                                 \
    } while (0)                                       \
}                                                     \

//DELETE宏
#define DELETE(ptr,type)                      \
{                                             \
    do{                                       \
        ptr->~type();                         \
        operator delete(ptr);                 \
    } while (0)                               \
}                          


//NEW_ARRAY宏
#define NEW_ARRAY(ptr,type,n)                    \
do{                                              \
    ptr = (type*)operator new(sizeof(type)*n);   \
    for (size_t i = 0; i < n; ++i)               \
    {                                            \
        new(ptr + i)type;                        \
    }                                            \
} while (0);

//DELETE_ARRAY宏
#define DELETE_ARRAY(ptr,type,n)                   \
do{                                                \
    for (size_t i = 0; i < n; ++i)                 \
    {                                              \
        (ptr + i)->~type();                        \
    }                                              \
    operator delete(ptr);                          \
} while (0)



//模拟实现new[]
#define NEW(ptr, type, n)                                      \
{                                                              \
    do{                                                        \
        ptr = (type*)operator new(sizeof(type)*n + 4);         \
        *((int*)ptr) = n;                                      \
        ptr = (type*)((char*)ptr + 4);                         \
        for (size_t i = 0; i < n; ++i)                         \
        {                                                      \
            new(ptr + i)type;                                  \
        }                                                      \
    } while (0)                                                \
}                                                              \


//模拟实现delete[]
#define DELETE(ptr,type,n)                       \
{                                                \
    do{                                          \
        size_t n = *((char*)ptr - 4);            \
        for (size_t i = 0; i < n; ++i)           \
        {                                        \
            (ptr + i)->~type();                  \
        }                                        \
        operator delete(ptr);                    \
    } while (0)                                  \
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值