operator new 与 operator delete
发布日期:2025-04-29 07:45:53 浏览次数:15 分类:精选文章

本文共 2323 字,大约阅读时间需要 7 分钟。

C++??????????????????

????????????????????????C++??new?delete???????????????????????????????????????????????????????????????????????????????????????????

??????????

??????????????????????????Allocator???????????????????????????operator new?operator delete????????????????????

#include 
#if defined(USE_DL_MALLOC) extern "C" void * dlmalloc(size_t); extern "C" void dlfree(void *);#else #define MALLOC malloc #define FREE free#endifstruct Allocator { static void* operator new(size_t space_length) { printf("acquire %u space\n", space_length); return MALLOC(space_length); } static void operator delete(void* space_pointer, size_t space_length) { printf("release %u space %p\n", space_length, space_pointer); FREE(space_pointer); } static void* operator new[](size_t space_length) { printf("acquire %u array\n", space_length); return MALLOC(space_length); } static void operator delete[](void* space_pointer, size_t space_length) { printf("release %u array %p\n", space_length, space_pointer); FREE(space_pointer); }};

???????

??????????????Matrix_1x4???????Allocator?????4????????????????Matrix_4x4??????4x4?????????

struct Matrix_1x4 : public Allocator {    int X01, X02, X03, X04;};struct Matrix_4x4 : public Matrix_1x4 {    int X11, X12, X13, X14;    int X21, X22, X23, X24;    int X31, X32, X33, X34;};struct Matrix_1x3 {    int X01, X02, X03;};struct Matrix_3x3 : public Matrix_1x3, public Allocator {    int X11, X12, X13;    int X21, X22, X23;};

??????

???????????????????????3x3??????????????????

int main(int argc, char* argv[]) {    Matrix_1x4* pArray1 = new Matrix_1x4[2];    Matrix_4x4* pArray2 = new Matrix_4x4[2];    Matrix_1x3* pArray3 = new Matrix_1x3[2];    Matrix_3x3* pArray4 = new Matrix_3x3[2];    delete[] pArray1;    delete[] pArray2;    delete[] pArray3;    delete[] pArray4;    Matrix_1x4* pMatrix1 = new Matrix_1x4;    Matrix_4x4* pMatrix2 = new Matrix_4x4;    Matrix_1x3* pMatrix3 = new Matrix_1x3;    Matrix_3x3* pMatrix4 = new Matrix_3x3;    delete pMatrix1;    delete pMatrix2;    delete pMatrix3;    delete pMatrix4;}

??

???????????????????????????????????????????????????????????????????????????malloc?free???????????????????

???????dlmalloc?????????????????USE_DL_MALLOC????????????????????

上一篇:operator() error
下一篇:operator new and delete

发表评论

最新留言

很好
[***.229.124.182]2026年06月06日 02时23分15秒