Chinaunix

标题: 好久没有玩C++了,请教一个语法问题 [打印本页]

作者: kytexzy    时间: 2009-09-02 11:51
标题: 好久没有玩C++了,请教一个语法问题
小弟我最近看一个C plus plus代码,遇到一个语法不懂,求问。

if (pointer == storage_.address())
{
  in_use = false;
}
else
{
  :: operator delete(pointer);
}

请问上面代码中的
:: operator
域操作符::为什么要用到operator关键字前面?在语法层面这是什么意思?



[ 本帖最后由 kytexzy 于 2009-9-2 11:52 编辑 ]
作者: GodPig    时间: 2009-09-02 12:24
调用全局的operator delete??
是不是为了防止系统的被重写?
作者: openspace    时间: 2009-09-02 12:26
标题: 回复 #1 kytexzy 的帖子
这个不会是重载了delete吧
然后调用全局delete

具体重载不是太熟悉
C++ Primer或者C++编程思想上应该有
LZ可以看看
作者: OwnWaterloo    时间: 2009-09-02 12:38
标题: 回复 #1 kytexzy 的帖子
这东西叫什么名字我忘了, 好像叫全局域运算符 ……

作用是, 从名字空间的根开始解析名字。

/* 1 */  void f();
namespace ns1 {
/* 2 */  void f();

namespace ns2 {
/* 3 */  void f();

    void g()
    {
        /* 3 */  ns2::f();  f();
        /* 2 */  ns1::f();
        /* 1 */  ::f();
        /* 2 */  ::ns1::f();
        /* 3 */  ::ns1::ns2::f();
    }

}

    void g()
    {
        /* 2 */  ns1::f();  f();
        /* 1 */  ::f();
        /* 2 */  ::ns1::f();
    }

}

    void g()
    {
        /* 1 */  f();  ::f();
    }


lz那段代码是成员函数中的吧?
因为类自己可以定义 operator delete
所以 :: operator delete 就是说, 一定调用全局那个, 无论类是否有自己的。
作者: gussing    时间: 2009-09-02 12:58
请把operator delete连在一起念。。。
作者: kytexzy    时间: 2009-09-02 14:00
明白了,原来是解析名字空间用的。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2