new/delete和new[]/delete[]的底层调用和简单实现-创新互联
在使用new的时候做了两件事:
成都创新互联公司是一家以网络技术公司,为中小企业提供网站维护、网站建设、网站设计、网站备案、服务器租用、域名注册、软件开发、小程序开发等企业互联网相关业务,是一家有着丰富的互联网运营推广经验的科技公司,有着多年的网站建站经验,致力于帮助中小企业在互联网让打出自已的品牌和口碑,让企业在互联网上打开一个面向全国乃至全球的业务窗口:建站联系热线:135182197921、调用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); }
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
当前文章:new/delete和new[]/delete[]的底层调用和简单实现-创新互联
新闻来源:http://myzitong.com/article/dghjii.html