条款9:避免隐藏标准形式的new

来源:互联网 发布:ubuntu查看系统分区 编辑:程序博客网 时间:2024/06/07 08:18
因为内部范围声明的名称会隐藏掉外部范围的相同的名称,所以对于分别在类的内部和全局声明的两个相同名字的函数f来说,类的成员函数会隐藏掉全局函数。

  然而如果在类里增加了一个带多个参数的operator  new函数,结果就有可能令人大吃一惊。

#include <iostream>
using namespace std;

class x
{
public:
        static void* operator new(size_t size,new_handler p){}
};

void specialerrorhandler(){}

int main()
{
        x *px1 = new (specialerrorhandler)x;
        x *px2 = new x; //出错
}

 

上面的x *px2 = new x;出错,因为在类里定义了一个称为“operator new”的函数后,会不经意地阻止了对标准new的访问。
原创粉丝点击