zoukankan      html  css  js  c++  java
  • new[]/delete[]与new/delete区别

    new[]/delete[]与new/delete完全不同
    -动态对象数组创建通过new[] 完成
    -动态对象数组的销毁通过delete[]完成
    -new[]/delete[]能够被重载,进而改变内存管理方式

    new[]/delete[]的重载方式
    //static member function
    void* operator new[](unsigned int size)
    {
        return malloc(size);
    }
    //static member function
    void operator delete[](void* p)
    {
        free(p);
    }

    注意事项:

    -new[]实际需要返回的内存空间可能比期望的要多

    -对象数组占用的内存中需要保存数组信息(数组的长度,因为编译器要为我们自动的调用构造函数和析构函数,如果不知道这个值,编译器无法知道调用几次构造和析构函数)

    -数组信息用于确定构造函数和析构函数的调用次数

    动态数组的内存管理

    #include <iostream>
    #include <string>
    #include <cstdlib>
    
    using namespace std;
    
    class Test
    {
    private:
        int m_value;
    public:
    
        Test()
        {
            m_value = 0;
        }
        void* operator new(unsigned int size)
        {
            cout << "operator new :" << size <<endl;
    
            return malloc(size);
        }
    
        void operator delete(void* p)
        {
            cout << "operator delete:" << p << endl;
            free(p);
        }
    
        void* operator new[](unsigned int size)
        {
            cout << "operator new[] :" << size <<endl;
    
            return malloc(size);
        }
    
        void operator delete[](void* p)
        {
            cout << "operator delete[]:" << p << endl;
            free(p);
        }
    
    
    };
    
    
    int main()
    {
        Test* pt = NULL;
    
        pt = new Test;
        delete pt;
    
        pt = new Test[5];
        delete[] pt;
    
        return 0;
    }

     从打印结果看,new[]实际需要返回的内存空间没有比期望的多,就是20个字节。这是由于编译器的不同而造成的。

    new[]/delete[]的重载方式//static member functionvoid* operator new[](unsigned int size){return malloc(size);}

    //static member functionvoid operator delete[](void* p){free(p);}

  • 相关阅读:
    让一个不固定高度的div,保持垂直水平居中的方法
    Set、Map、WeakSet 和 WeakMap
    JS 中常用的 Math 方法
    不使用 new,创建一个实例对象
    做一个弹窗
    变量提升
    事件委托实践
    vue组件通信
    新版vue脚手架关闭eslint
    图片懒加载原生js实现
  • 原文地址:https://www.cnblogs.com/-glb/p/12296750.html
Copyright © 2011-2022 走看看