注册 登录
编程论坛 C++教室

重载new里的问题

lyj23 发布于 2011-05-28 10:42, 706 次点击
我在书上看到一个new的重载
void* operator new(size_t)
{cout<<"Alloc……"<<endl;
throw 47;}

这个重载为什么会可以?如果调用这个重载,new本身的功能不就没了?
还有这个怎么调用?第一个参数是无符号整型,那什么时候会调用重载函数,什么时候不掉用?

跪求高手!光临本贴
4 回复
#2
rjsp2011-05-28 11:05
这个重载为什么会可以?
--- 你觉得为什么不可以,或者说,你觉得这段代码哪里有语法错误?

如果调用这个重载,new本身的功能不就没了?
--- 有没有,那是程序逻辑问题,这取决于程序员想干什么。

还有这个怎么调用?
---
程序代码:
#include <iostream>
using namespace std;

void* operator new(size_t)
{
    cout << "Alloc……" << endl;
    throw 47;
}

int main()
{
    try {
        new int;
    } catch(int e) {
        cout << e << endl;
    }

    return 0;
}

第一个参数是无符号整型,那什么时候会调用重载函数,什么时候不掉用?
--- 默认的operator new第一个参数当然是无符号类型,难道你还能分配 -1 个字节?
当需要调用全局operator new时候调用,不需要时不调用。这个问题有点傻。
#3
lyj232011-05-28 15:05
额,书上好像说过重载运算符不能改变运算符本来的……

我是说这个new重载以后,调用它,那比如new int a;那就算不抛出异常

a的内存会不会被创建呢?
里面不写一遍::operator new(a)  //类似delete的写法
也可以吗?
#4
lyj232011-05-29 17:16
高手COME ON !跪求高手
#5
小言与西加加2011-06-02 20:53
重载的意义在于为运算符添加我们需要但本身并没有的功能,原先的功能仍存在.
你重载的这个new不进行其它操作,只输出一句话,不创建任何东西!
1