Effective_C++:9、避免遮掩了new的正规形式

9、避免遮掩了new的正规形式

1、遮掩new的正规形式

        内部的一个声明名称,会遮掩外边部的相同名称。即若全局区域和class内部都有函数f(),成员函数可能会遮掩掉全局函数。
        因此,当给class加进一个operator new时,将不经意间妨碍调用new正规形式的能力。
class X {
public:
    static void * operator new (size_t size, new_handler p);
    ...
};

void specialErrorHandler();

X *px1 = new (specialErrorHandler) X;

X *px2 = new X;//错误,调用global版本,失败!

2、避免遮掩了new的正规形式

        1.一种方法是写一个class专属的operator new,并利用重载,让他支持正规调用形式。
class X {
public:
    static void * operator new (size_t size, new_handler p);
    static void * operator new (size_t size) {return ::operator new(size)}
};
        2.另一种方法是为每一个额外的参数提供默认值。
class X {
public:
    static void * operator new (size_t size, new_handler p = 0);
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值