实现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) \
}