:: operator()做什么?

Wil*_*ill 1 c++ operator-keyword

    struct reserved_memory
    {
     void *safety;
     size_t safety_size;
     reserved_memory(size_t size) : safety_size(size)
     {
       init();
     }

     bool use() {
        if (safety) {
            ::operator(safety); 
            safety=0;
            return true;
        } else
            return false;
     }
    private:
     void init() 
     {
        safety=::operator new(safety_size);
     }
   }
Run Code Online (Sandbox Code Playgroud)

我有这个没有编译的代码 - 我以前也没见过这个.这是调用构造函数吗?结构中没有重载()运算符...

Joh*_*mew 6

看起来非常明显,那些编写该代码的人打算打电话 ::operator delete(safety)

(证据:safety是指针;它是初始化的::operator new(safety_size),在它们错误地调用后将::operator(safety)它们重置为零).

至于代码作为一个整体的目的,我不知道 - 看起来它可能是一个非常差的设计的一部分.

肯·布鲁姆为代码的目的提供了一个合理的答案:保留一些紧急记忆,以便在可怕的情况下释放(给予足够的喘息空间以便能够发出错误信息).有关详细信息,请参阅他的回答


Ken*_*oom 5

关于此代码似乎正在做什么的说明:

在旧的Mac上(在MacOS X之前,可能仍然在一些低内存的手持系统上),您曾经保留一些内存作为安全性,以便在内存不足时可以释放它,以便您可以使用它警告用户有什么不对劲并保存他们的所有工作.我在Jim Trudeau的Macintosh Starting Kit中看到了这种技术.

所以这看起来是同样的事情 - 按大小保留一块内存,并在需要时释放它.显然,程序员不想去的更常见的成语safety=new char[safety_size]delete[] safety.