zoukankan      html  css  js  c++  java
  • C++重载new和delete运算符

    内存管理运算符 new、new[]、delete 和 delete[] 也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数。一般情况下,内建的内存管理运算符就够用了,只有在需要自己管理内存时才会重载。

    成员函数的形式重载 new 运算符:

    void * className::operator new( size_t size ){
        //TODO:
    }

    以全局函数的形式重载 new 运算符:

    void * operator new( size_t size ){
        //TODO:
    }

    两种重载形式的返回值相同,都是void *类型,并且都有一个参数,为size_t类型。在重载 new 或 new[] 时,无论是作为成员函数还是作为全局函数,它的第一个参数必须是 size_t 类型。size_t 表示的是要分配空间的大小,对于 new[] 的重载函数而言,size_t 则表示所需要分配的所有空间的总和。

    size_t 在头文件 <cstdio> 中被定义为typedef unsigned int size_t;,也就是无符号整型。

    当然,重载函数也可以有其他参数,但都必须有默认值,并且第一个参数的类型必须是 size_t。

    同样的,delete 运算符也有两种重载形式。以类的成员函数的形式进行重载:

    void className::operator delete( void *ptr){
        //TODO:
    }

    全局函数的形式进行重载:

    void operator delete( void *ptr){
        //TODO:
    }

    两种重载形式的返回值都是 void 类型,并且都必须有一个 void 类型的指针作为参数,该指针指向需要释放的内存空间。

    当我们以类的成员函数的形式重载了new 和 delete 操作符,其使用方法如下:

     
    1. C * c = new C; //分配内存空间
    2. //TODO:
    3. delete c; //释放内存空间

    如果类中没有定义 new 和 delete 的重载函数,那么会自动调用内建的 new 和 delete 运算符。

  • 相关阅读:
    Python什么是二次开发的意义?python在.net项目采用
    斐波那契数
    Java 兑换ObjectC代码
    第18本:《整理的艺术》
    第16本:《视觉繁美:信息可视化方法与案例解析》
    第14本:《李鸿章传》
    第10本:《设计心理学》
    第17本:《代码的未来》
    第15本:《视不可当----信息图与可视化传播》
    第13本:《富爸爸,穷爸爸》
  • 原文地址:https://www.cnblogs.com/gzgb/p/6242067.html
Copyright © 2011-2022 走看看