当前位置: 首页> 教育> 大学 > C++ new/delete 重载

C++ new/delete 重载

时间:2025/8/24 13:37:33来源:https://blog.csdn.net/gopher9511/article/details/140898023 浏览次数:0次

operator new/delete 重载

语法格式
void  *operator new(size_t);
void  operator delete(void *);
void  *operator new[](size_t);
void  operator delete[](void *);
#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; // 初始化_yreturn p; // 返回分配的内存指针}// 重载delete操作符void operator delete(void *p){ // 8cout << "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; // 私有成员变量_xint _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 释放会造成,只有第一个元素
释放的情形。

关键字:C++ new/delete 重载

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: