new/delete和new[]/delete[]的底层调用和简单实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了new/delete和new[]/delete[]的底层调用和简单实现相关的知识,希望对你有一定的参考价值。
在使用new的时候做了两件事:
1、调用operator new分配空间
2、调用构造函数初始化对象
在使用delete的时候也做了两件事:
1、调用析构函数清理对象
2、调用operator delete函数释放空间
在使用new[N]的时候也做了两件事:
1、调用operator new分配空间
2、调用N次构造函数初始化N个对象
在使用delete[]的时候也做了两件事:
1、调用N次析构函数清理N个对象
2、调用operator delete函数释放空间
定位new表达式:定位new表达式是在以分配的原始空间中调用构造函数初始化一个对象。
new(place_address) type;
new(place_address) type(initializer-list);
place_address必须是一个指针,initializer-list是初始化列表
利用mallco/free和定位new表达式来模拟new/delete和new[]/delete[]:
例:
class A { public: A(int a=2) :_a(a) { cout << "A()"<< endl; } void Show() { cout << _a << endl; } ~A() { cout << "~A()" << endl; } private: int _a; }; void test() { //分配1个A类型空间 A *pa = (A *)malloc(sizeof(A)); new(pa)A(1); //调用构造函数 pa->~A(); //调用析构函数 free(pa); //分配10个A类型的空间 A* pa = (A *)malloc(sizeof(A)*10); for (int i = 0; i < 10; i++) //调用十次构造函数 { new(pa + i) A(i); } for (int i = 0; i < 10; i++) //调用十次析构函数 { (pa + i)->~A(); } free(pa); }
本文出自 “11132019” 博客,转载请与作者联系!
以上是关于new/delete和new[]/delete[]的底层调用和简单实现的主要内容,如果未能解决你的问题,请参考以下文章
new/delete和new[]/delete[]的底层调用和简单实现
c++ new operator和operator new,delete operator和operator delete
C++初阶:内存管理C/C++内存分布及管理方式 | new/delete实现原理及operator new和operator delete函数
C++初阶:内存管理C/C++内存分布及管理方式 | new/delete实现原理及operator new和operator delete函数