【问题标题】:overloading "new" operator重载“新”运算符
【发布时间】:2011-12-09 17:48:17
【问题描述】:

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

  1. 这里,函数的返回类型是'void',但我 必须引入return语句......否则我的程序崩溃......为什么会这样?
  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;
    }
    

    感谢您的澄清。

【问题讨论】:

    标签: c++ new-operator


    【解决方案1】:

    函数的返回类型不是void,它是一个void*(void指针)。 void 指针是一个通用指针,它可以指向任何东西,但它不能被取消引用——你必须在取消引用之前将它转换为另一种类型。

    如果您不返回 void *,那么您就不会返回指向您分配的内存的指针,并且用户代码将失败。

    【讨论】:

    • 非常正确 :) 不要只是喜欢未定义的行为?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      重载new的简单演示

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-12
        • 2012-11-18
        • 1970-01-01
        • 2016-02-19
        • 1970-01-01
        相关资源
        最近更新 更多