C++ 中new的重载问题

C++语言 码拜 8年前 (2016-09-13) 1414次浏览
#include<iostream>
#include<string.h>
typedef unsigned int size_t;
using namespace std;
class A
{
public:
    A();
    static void* operator new(size_t size);         //定义操作符new重载函数
};
A :: A()
{
}
void* A :: operator new(size_t size)
{
    A *temp = :: new A();          //调用new操作符开辟空间
    if(temp!=NULL)
    {
        cout << "开辟空间成功!" << endl;
    }
    return temp;
}
main()
{
    A *p = new A;
    return 0;
}

如上代码,对new进行重载,但是看不懂 A *temp = :: new A(); 这一行代码,哪位能给仔细讲讲
另外A *p = new A;这一句调用的时候也不是很懂?

解决方案

2

这个重载是错误的,看不懂就不看吧
应该这样做
void* A :: operator new(size_t size)
{
void *temp = :: operator new(size);          //调用全局 operator new函数 开辟空间
//一般自定义new 的目的,是用本人定义的内存管理函数,
// 替换系统内存管理函数,这里偷个懒,直接调用
// :: operator new.是没计划本人写, 内存管理函数,
if(temp!=NULL)
{
cout << “开辟空间成功!” << endl;
}
return temp;
}

10

#include<iostream>
#include<string.h>
 
typedef unsigned int size_t;
 
using namespace std;
 
class A
{
public:
    A();
    static void* operator new(size_t size);         //定义操作符new重载函数
};
 
A :: A()
{
 
}
 
void* A :: operator new(size_t size)
{
    A *temp = :: new A();          //调用全局域中的new操作符开辟内存空间,此处并没有调用类A的构造函数,只是开辟了内存空间。
    if(temp!=NULL)
    {
        cout << "开辟空间成功!" << endl;
    }
    return temp;
}
 
main()
{
    A *p = new A; //调用类A中的重载的new操作符。(一般在new表达式中,编译器会首先查找申请的类A中能否重载了new操作符,若用户本人重载了new操作符,则调用类A中的;若没有重载,则调用全局域中的new操作符。)
 
    return 0;
}

16

A *temp = :: new A();  //调用全局的new动态分配A对象,地址返回给temp
A *p = new A; //动态分配A对象,地址返回给p

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++ 中new的重载问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)