首页 > 代码库 > new/delete和new[]/delete[]的底层调用和简单实现
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[]的底层调用和简单实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。