zoukankan      html  css  js  c++  java
  • 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操作符。

  • 相关阅读:
    Jenkins与Hudson的关系
    Jenkins企业版与CloudBees
    NSLookup命令
    XCopy提示“访问遭到拒绝”问题解决
    npm配置文件
    npm下载包时代理配置
    Jenkins实现测试环境到生产环境一键部署(Windows)
    可能是迄今为止最好的GitHub代码浏览插件--赞
    Ali OSS服务端签名直传并设置上传回调
    导入https证书
  • 原文地址:https://www.cnblogs.com/yongpan/p/7899738.html
Copyright © 2011-2022 走看看