C++ new/delete 重载

operator new/delete 重载

c++ 复制代码
语法格式
void  *operator new(size_t);
void  operator delete(void *);
void  *operator new[](size_t);
void  operator delete[](void *);
c++ 复制代码
#include <iostream>
using namespace std;

class A
{
public:
    // 构造函数
    A(){
        // _x=1;
        // _y=2;
        // 在new中初始化了
        cout << "A()" << endl;
    }

    // 析构函数
    ~A(){
        cout << "~A()" << endl;
    }

    // 成员函数,输出_x和_y的值
    void func(){
        cout << _x << "  " << _y << endl;
    }

    // 重载new操作符
    void *operator new(size_t size){ // size为8,因为A类的大小为8字节(两个int)
        cout << size << endl;
        cout << "operator new" << endl;
        void *p = malloc(size); // 分配内存
        ((A*)p)->_x = 100; // 初始化_x
        ((A*)p)->_y = 200; // 初始化_y
        return p; // 返回分配的内存指针
    }

    // 重载delete操作符
    void operator delete(void *p){ // 8
        cout << "operator delete" << endl;
        free(p); // 释放内存
    }

    // 重载new[]操作符
    void *operator new[](size_t size){
        cout << "operator new[]" << endl;
        cout << size << endl;
        void *p = malloc(size); // 分配内存
        cout << p << endl;
        return p; // 返回分配的内存指针
    }

    // 重载delete[]操作符
    void operator delete[](void *p){
        cout << "operator delete[]" << endl;
        cout << p << endl;
        free(p); // 释放内存
    }

private:
    int _x; // 私有成员变量_x
    int _y; // 私有成员变量_y
};

int main(){
    // 使用重载的new操作符创建A类的对象
    A *pa = new A;
    pa->func(); // 调用成员函数func,输出_x和_y的值
    delete pa; // 使用重载的delete操作符释放内存

    // 使用重载的new[]操作符创建A类的数组
    A *pb = new A[3];
    delete[] pb; // 使用重载的delete[]操作符释放内存

    return 0;
}

如果是用 operator new[]申请的空间,用 delete 释放会造成,只有第一个元素

释放的情形。

相关推荐
沐知全栈开发2 分钟前
Bootstrap5 轮播
开发语言
闻缺陷则喜何志丹7 分钟前
【数论 快速指数幂 龟速乘】P8652 [蓝桥杯 2017 国 C] 小数第 n 位|普及+
c++·蓝桥杯·数论·快速指数幂·龟速乘
༾冬瓜大侠༿7 分钟前
C++string
c语言·开发语言·c++·算法
雨季6668 分钟前
Flutter 三端应用实战:OpenHarmony “极简文本字符计数器”——量化表达的尺度
开发语言·flutter·ui·交互·dart
skywalker_1111 分钟前
多线程&JUC
java·开发语言·jvm·线程池
黎雁·泠崖12 分钟前
Java基础核心能力总结:从语法到API的完整知识体系
java·开发语言
雨季66619 分钟前
Flutter 三端应用实战:OpenHarmony “呼吸灯”——在焦虑时代守护每一次呼吸的数字禅修
开发语言·前端·flutter·ui·交互
初恋叫萱萱1 小时前
构建高性能生成式AI应用:基于Rust Axum与蓝耘DeepSeek-V3.2大模型服务的全栈开发实战
开发语言·人工智能·rust
cyforkk2 小时前
12、Java 基础硬核复习:集合框架(数据容器)的核心逻辑与面试考点
java·开发语言·面试
我材不敲代码6 小时前
Python实现打包贪吃蛇游戏
开发语言·python·游戏