• C++ 重载 new/delete


    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 操作符,其使用方法如下:

    C * c = new C; //分配内存空间
    //TODO:
    delete c; //释放内存空间
    如果类中没有定义 new 和 delete 的重载函数,那么会自动调用内建的 new 和 delete 运算符。

     转载:http://c.biancheng.net/view/2314.html

     

  • 相关阅读:
    特征方程
    鸽巢原理
    Python列表与字典
    布尔型
    python字符串
    Python小笔记
    IntelliJ 中Maven pom.xml依赖不生效解决
    IDEA创建servlet,篇末有找不到servlet报404的原因
    jQuery的ajax之验证用户名是否被注册
    jquery之Validata表单验证
  • 原文地址:https://www.cnblogs.com/xiaohaigegede/p/13975888.html
Copyright © 2020-2023  润新知