"new"运算符的过载

overloading "new" operator

本文关键字:运算符 new      更新时间:2023-10-16

在定义类中声明的重载new操作符的工作方式时,我遇到了以下困惑....

  1. 这里,函数的返回类型是'void'必须引入一个返回语句.....否则我的程序崩溃....为什么如此?
  2. void *p"是什么意思

    void *myclass::operator new(size_t size)
    {
    void *p;
    p=malloc(size);
    cout<<"IN overloaded new";
    if(!p)
    {
      bad_alloc ba;
      throw ba;
     }  
    return p;
    }
    

函数的返回类型不是void,而是void* (void指针)。void指针是一种泛型指针,可以指向任何对象,但不能解引用——在解引用之前,必须将其强制转换为另一种类型。

如果你不返回void *,那么你就没有返回指向你分配的内存的指针,用户代码将失败

void*是一个无类型指针。它是一个可以指向任何东西的指针。注意,这个函数的返回类型不是void,而是void*。它应该返回一个指向已分配内存的指针。

重载new的简单演示

void* operator new(size_t num)
{
 return malloc(num);
 }

重载new函数的返回类型必须为void*。它应该返回一个指向所分配内存块开始的指针。这里它返回void *而不是void(这意味着不返回任何东西)。