2011-12-09 131 views
2

虽然我是定义在一个类中声明重载new运算符的工作, 我碰到下面的困惑来到....超载的“新”运营商

  1. 这里,函数的返回类型为'空',但我 必须引入返回声明.....否则我的程序崩溃....为什么这样?
  2. 什么是 “无效* 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; 
    } 
    

    的一点澄清的意思表示赞赏。

回答

1

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

6

该函数的返回类型不是void,它是一个void *(void指针)。 void指针是一个通用的指针,它可以指向任何东西,但不能解除引用 - 您必须在将其解除引用之前将其转换为其他类型。

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

+3

用户代码将失败_if you lucky_。 – Mankarse

+0

非常真实:) dontcha只是爱未定义的行为? –

0

重载新

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

重载新的返回类型的简单演示必须是void *。预计会返回一个指向分配内存块的开始的指针。在这里它返回void *而不是void(这意味着不返回任何东西)。