C++ new delete new[] delete[]重载实现
来源:互联网 发布:java future 线程池 编辑:程序博客网 时间:2024/05/01 22:26
这篇博文主要是分析了C++ new()和构造函数的执行,delete()与析构函数的调用方式,通过全局重载和局部重载看清楚调用的关系
using namespace std;#include <iostream>#include <cstdlib>class Student{public:Student(){cout << "Constructer" << endl;}~Student(){cout << "析构函数" << endl;}static void* operator new(size_t size){cout << "own new function" << endl;Student* stu = (Student*)::operator new(size);return stu;}static void operator delete(void* p){cout << "own delete function" << endl;::delete p;}static void* operator new[](size_t size){cout << "own new[] function" <<endl;return ::operator new(size);} };void* operator new(size_t size){cout << "global new function" << endl;void* p = malloc(size);return p;}void operator delete(void * p){cout << "global delete function"<< endl;free(p);}void operator delete[](void* p){cout << "global delete[] function" << endl;free(p);}void main(){Student* student = new Student();delete student;//Student* student2 = new Student[5];//delete[] student2;cin.get();}
可以看出执行顺序为:内部重载的new-->全局重载的new()--->malloc()-->构造函数初始化-->内部的析构函数---》内部的delete()--》全局的delete()-->free()函数
可以看出重载new[]和delete[]先执行malloc()分配所需要的内存然后每个元素会调用构造函数进行初始化
0 0
- C++ new delete new[] delete[]重载实现
- C++new和delete重载
- 【C++】new delete & new[] delete[]
- 重载new 和 delete
- 关于重载new/delete
- 重载new和delete
- new delete重载
- new 和 delete 重载
- c++重载new/delete
- C++ new/delete 重载
- new和delete重载
- 重载全局new,delete
- c++ 重载 new delete
- new和delete重载
- c++ new delete重载
- 重载new和delete
- 重载new 和delete
- C++new delete 实现原理
- Windows下基于ssh搭建GIT服务器
- 欢迎使用CSDN-markdown编辑器
- Java简单笔试题(二)
- 基于文本服务框架的拼音输入法研究与实现
- 20170307-leetcode-263-Ugly Number
- C++ new delete new[] delete[]重载实现
- jquery插件--增减数字
- 初步学习,简单问题:No resource found that matches the given name (at 'background' with value '@drawable/ con
- C语言宏中"#"和"##"的用法
- 增加swap空间大小
- System.ArgumentException 位于 System.Windows.Forms.dll 源对象不公开“IPropertyNotifySink”事件接口
- 程序员创业注意事项
- 深入理解Java:注解(Annotation)自定义注解入门
- 線性內插(Interpolation)