因为内部范围声明的名称会隐藏掉外部范围的相同的名称,所以对于分别在类的内部和全局声明的两个相同名字的函数f来说,类的成员函数会隐藏掉全局函数

class x {
public:
void f(); // operator new的参数指定一个
// new-hander(new的出错处理)函数
static void * operator new(size_t size, new_handler p);
}; void specialerrorhandler(); // 定义在别的地方 x *px1 =
new (specialerrorhandler) x; // 调用x::operator new x *px2 = new x; // 错误!

在类里定义了一个称为“operator new”的函数后,会不经意地阻止了对标准new的访问。解决办法是在类里写一个支持标准new调用方式的operator new,它和标准new做同样

的事。这可以用一个高效的内联函数来封装实现。

class x {
public:
void f(); static void * operator new(size_t size, new_handler p); static void * operator new(size_t size)
{ return ::operator new(size); }
}; x *px1 =
new (specialerrorhandler) x; // 调用 x::operator
// new(size_t, new_handler) x* px2 = new x; // 调用 x::operator
// new(size_t)

另一种方法是为每一个增加到operator new的参数提供缺省值(见条款24):

class x {
public:
void f(); static
void * operator new(size_t size, // p缺省值为0
new_handler p = ); //
}; x *px1 = new (specialerrorhandler) x; // 正确 x* px2 = new x; // 也正确

条款九: 避免隐藏标准形式的new的更多相关文章

  1. Effective C++ 第二版 8) 写operator new 和operator delete 9) 避免隐藏标准形式的new

    条款8 写operator new 和operator delete 时要遵循常规 重写operator new时, 函数提供的行为要和系统缺省的operator new一致: 1)正确的返回值; 2 ...

  2. 计算A+B及其结果的标准形式输出

    题目: 代码链接 解题思路: 首先,读懂题目,题目要求我们计算两个整型数a,b之和,这是简单的加法计算,与平常的题目一般无二.但是此题的不同在于要求我们输出的数必须是标准形式,题目也对标准形式做了相应 ...

  3. 机器学习——SVM详解(标准形式,对偶形式,Kernel及Soft Margin)

    (写在前面:机器学习入行快2年了,多多少少用过一些算法,但由于敲公式太过浪费时间,所以一直搁置了开一个机器学习系列的博客.但是现在毕竟是电子化的时代,也不可能每时每刻都带着自己的记事本.如果可以掏出手 ...

  4. JSP——九大隐藏对象之四大域对象

    你一定在你的Jsp文件中的监本片段中使用过以下九个对象的几种:out.config.page.pageContext.exception.request.response.application.se ...

  5. 隐藏Console形式无效(继续1)

    [2014/10/19  23:57 ] :由port主机遥控. 该程序的执行后,计划自己主动开放之机999port,其他计算机将能够通过999port机器的操作. 程序中使用的到的命令: telne ...

  6. CSS(九)元素隐藏和利弊

    隐藏元素.无法点击,这之间有什么关系呢? 可以配合我写的 html 食用:https://github.com/dirstart/ScriptOJ/blob/master/OJ_CSS/4.css%E ...

  7. 《Java并发编程实战》笔记-状态依赖方法的标准形式

    void stateDependentMethod() throws InterruptedException { //必须通过一个锁来保护条件谓词 synchronized(lock) { whil ...

  8. Effective C++ 条款九、十 绝不在构造和析构过程中调用virtual函数|令operator=返回一个reference to *this

      1.当在一个子类当中调用构造函数,其父类构造函数肯定先被调用.如果此时父类构造函数中有一个virtual函数,子类当中也有,肯定执行父类当中的virtual函数,而此时子类当中的成员变量并未被初始 ...

  9. java中的九大隐藏变量.

          javax.servlet.jsp.JspWriter类型,代表输出流的对象.作用域为page(页面执行期) request:javax.servlet.ServletRequest的子类 ...

随机推荐

  1. 镜像中的 Everything, GnomeLive ,KdeLive ,livecd ,NetInstall的区别?

    everything: 对完整版安装盘的软件进行补充,集成所有软件 GnomeLive , GNOME桌面版 KdeLive , KDE桌面版 livecd 光盘上运行的系统 ,NetInstall ...

  2. hibernate4+spring4+struts2的Maven中的pom.xml文件的配置

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  3. git 控制操作

    克隆文件 git clone https://gitee.com/xxxxx/xxxxx.git 克隆分支文件 git clone -b 分支名 https://gitee.com/xxxxx/xxx ...

  4. call, apply, bind 区别

    #call, apply, bind 区别及模拟实现call apply bind 三者都可以用来改变this的指向,但是在用法上略有不同  首先说一下call和apply的区别 call和apply ...

  5. vs code 格式化 美化 html js css 插件 Beautify

    安装 Beautify 插件 然后 F1 输入 Beautify file 回车即可

  6. tab切换组件nz-tab

    <nz-card [nzBordered]="true" nzTitle="卡片标题"> <nz-card style="width ...

  7. Hibernate修改操作 删除操作 查询操作 增加操作 增删改查 Hibernate增删查改语句

    我用的数据库是MySQL,实体类叫User public class User { private Integer uid; private String username; private Stri ...

  8. OneinStack 安装 LNMP 切换PHP版本

    如果你的环境不是OneinStack安装的  ,可以略过这条博客了 注意:以下所有命令若提示权限不足 请在命令前加 sudo *** ①,首先查看当前已安装的PHP版本,我这里安装了好几个版本,你们可 ...

  9. 【原】CentosDocker安装(一)

    CentosDocker安装 来源:https://www.runoob.com/docker/centos-docker-install.html 1.前提条件 目前,CentOS 仅发行版本中的内 ...

  10. 模板BSGS(SDOI2011计算器) 模板EXBSGS

    BSGS和EXBSGS是OI中用于解决A^xΞB(mod C)的常用算法. 1.BSGS BSGS用于A,C互质的情况. 令m=sqrt(C),此时x可表示为i*m+j. 式中i和j都<=sqr ...