5.10 C++内存管理操作符重载
参考:http://www.weixueyuan.net/view/6388.html
注意:
内存管理操作符new、new[]、delete和delete[]同样也可以进行操作符重载,其重载形式既可以是类成员函数的形式,又可以是顶层函数的形式
只有在需要进行自己的内存管理时才会对内存管理操作符进行重载。
在重载new和new[]操作符时,无论是以何种形式进行重载的,重载函数的第一个参数必须是size_t类型,该参数表示的含义是要分配空间的大小,对于new[]的重载函数而言,size_t类型参数则表示所需要分配的所有空间的总和。当然,重载函数也可以有其它参数,其它参数可以根据需要增加,但是第一个参数必须是size_t类型。
重载delete和delete[]操作符同样也都必须有一个参数,该参数为一个void型指针,指向需要释放的内存空间,当然重载函数同样可以根据需要添加其它参数,但是第一个指向待释放的内存空间的void型指针这个参数必不可少。
--------------------------------------------
内存管理操作符new、new[]、delete和delete[]同样也可以进行操作符重载,其重载形式既可以是类成员函数的形式,又可以是顶层函数的形式。在设计一般的程序时,使用内建的内存管理操作符基本够用了,只有在需要进行自己的内存管理时才会对内存管理操作符进行重载。
操作符new的重载函数有两种形式:
void * 类名::operator new ( size_t size )
{
//以类成员函数的形式重载new操作符
}
和
void * operator new ( size_t size )
{
//以顶层函数的形式重载new操作符
}
两种方式的重载函数返回值都是相同的,返回值都是void *类型。重载函数的参数都有一个参数,且均为size_t类型。在重载new和new[]操作符时,无论是以何种形式进行重载的,重载函数的第一个参数必须是size_t类型,该参数表示的含义是要分配空间的大小,对于new[]的重载函数而言,size_t类型参数则表示所需要分配的所有空间的总和。当然,重载函数也可以有其它参数,其它参数可以根据需要增加,但是第一个参数必须是size_t类型。如下面的重载是错误的:
void * 类名:: operator new( void * ptr) { }
同样的delete操作符也有两种重载形式:
void 类名:: operator delete ( void *ptr)
{
//以类成员函数的形式重载delete操作符
}
和
void 类名:: operator delete ( void *ptr)
{
//以类成员函数的形式重载delete操作符
}
两种重载方式均是返回void,并且两种重载方式都必须有一个参数,void 指针,该指针指向需要释放的内存空间。重载delete和delete[]操作符同样也都必须有一个参数,该参数为一个void型指针,指向需要释放的内存空间,当然重载函数同样可以根据需要添加其它参数,但是第一个指向待释放的内存空间的void型指针这个参数必不可少。
当我们以类成员函数的形式重载了new和delete操作符时,其使用方法如下:
C * c = new C; //分配内存空间
//
delete c; //释放内存空间
当然如果类中没有定义new或者delete的重载函数,则系统会自动调用内建的new或delete操作符。
5.10 C++内存管理操作符重载的更多相关文章
- 【翻译】《深入解析windows操作系统第6版下册》第10章:内存管理
[翻译]<深入解析windows操作系统第6版下册>第10章:内存管理(第一部分) [翻译]<深入解析windows操作系统第6版下册>第10章:内存管理(第二部分) [翻译] ...
- Netty核心概念(10)之内存管理
1.前言 之前的章节已经将启动demo中能看见的内容都分析完了,Netty的一个整体样貌都在第8节线程模型最后给的图画出来了.这些内容解释了Netty为什么是一个异步事件驱动的程序,也解释了Netty ...
- C++ 操作符重载 (operator)
重载不能改变操作符的优先级 如果一个内建操作符是一元的,那么所有对它的重载仍是一元的.如果是二元的重载后也是二元的 下面看一个有代表性的例子:: 头文件Complex.h: #includeusing ...
- MMU内存管理单元
arm-linux学习-(MMU内存管理单元) 什么是MMU MMU(Memory Management Unit)主要用来管理虚拟存储器.物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及 ...
- [转帖]MMU内存管理单元
MMU内存管理单元 https://www.cnblogs.com/alantu2018/p/9002309.html 之前对这一块一直不理解 最近学习了点 CPU time slice 以及 con ...
- C语言笔记 12_可变参数&内存管理&命令行参数
可变参数 有时,您可能会碰到这样的情况,您希望函数带有可变数量的参数,而不是预定义数量的参数.C 语言为这种情况提供了一个解决方案,它允许您定义一个函数,能根据具体的需求接受可变数量的参数.下面的实例 ...
- [译]C# 7系列,Part 10: Span<T> and universal memory management Span<T>和统一内存管理
原文:https://blogs.msdn.microsoft.com/mazhou/2018/03/25/c-7-series-part-10-spant-and-universal-memory- ...
- C++内存管理-重载内存管理函数
记录学习的点点滴滴,参考侯捷<<C++内存管理>> 我们先重载一下C++的几个内存管理函数 operator new, operator new[], operator del ...
- 【C++基础学习】引用和指针、重载、函数、内存管理
第一部分:引用VS指针 引用的含义:变量的别名 注意:变量不能只有别名,必须有一个真实的变量与之相对应 基本数据类型的引用 对别名本身的操作和它的实体的操作是一样的 1.基本数据类型的引用 类型 &a ...
随机推荐
- @Basic表示一个简单的属性 懒加载,急加载
5.@Basic(fetch=FetchType,optional=true) 可选 @Basic表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的getXxxx()方法,默认 即为 @Ba ...
- spring boot+freemarker+spring security标签权限判断
spring boot+freemarker+spring security标签权限判断 SpringBoot+SpringSecurity+Freemarker项目中在页面上使用security标签 ...
- English trip EM2-LP-3A Gifts Teacher:Patrick
课上内容(Lesson) 词汇(Key Word ) Identify vt. 确定:识别:使参与:把…看成一样 objects n. 物体(object的复数):目标 # UFO = ...
- (GoRails)在导航栏增加自动的搜索功能(jquery插件:easyautocomplete)(gem 'ransack' 搜索对象4000✨)
Global Autocomplete Search 需要用到一个JQuery插件和一个搜索对象的gem EasyAutocomplete jQuery插件: https://github.com/p ...
- string用scanf读入printf输出(节省时间)
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; in ...
- luffy后端之跨域corf的解决方法
跨域CORS 我们现在为前端和后端分别设置两个不同的域名 window 系统: C:\Windows\System32\drivers\etc\host linux/mac系统: /etc/hosts ...
- CRM系统之stark组件流程分析
CRM系统主要通过自定义stark组件来实现的(参照admin系统自定义): STARK组件: 1 admin组件 1 如何使用admin 2 admin源码 3 创建自己的admin组件:stark ...
- php-fpm的错误日志
- appium自动化测试(四)
一. 获取webview的html页面 方法一: 1. 获取webview中对应的html页面 谷歌浏览器中输入地址:chrome://inspect(第一次使用要FQ) 前提:手机开启USB调试模式 ...
- Apache commons(Java常用工具包)简介
Apache Commons是一个非常有用的工具包,解决各种实际的通用问题,下面是一个简述表,详细信息访问http://jakarta.apache.org/commons/index.html Be ...