如何在重载的新运算符中使用new运算符?

时间:2015-02-12 04:49:00

标签: c++ operator-overloading new-operator

我试图理解新的运算符重载,这意味着我对此深感困惑,我的问题在这里?

  1. 我如何在全局和本地的重载新运算符中使用new运算符。
  2. 关于全局超载我找到了这个链接 How do I call the original "operator new" if I have overloaded it?,但我的本地重载新运营商呢。如果有人对我的问题作出澄清,那对我来说太过分了。

    除此之外,我需要知道哪个是本地或全局重载新运算符的最佳方法(可能取决于我的设计)仍然需要了解最佳设计和性能目的。谢谢是提前

2 个答案:

答案 0 :(得分:5)

http://en.cppreference.com/w/cpp/memory/new/operator_new - 有例子和解释。

E.g:

#include <stdexcept>
#include <iostream>
struct X {
    X() { throw std::runtime_error(""); }
    // custom placement new
    static void* operator new(std::size_t sz, bool b) {
        std::cout << "custom placement new called, b = " << b << '\n';
        return ::operator new(sz);
    }
    // custom placement delete
    static void operator delete(void* ptr, bool b)
    {
        std::cout << "custom placement delete called, b = " << b << '\n';
        ::operator delete(ptr);
    }
};
int main() {
   try {
     X* p1 = new (true) X;
   } catch(const std::exception&) { }
}

答案 1 :(得分:0)

简单回答。

如果要在全局和本地中使用重载新运算符内的new运算符,则只需使用::(范围分辨率)作为前缀,以寻址全局新运算符。
例如:operator new() -> will call your custom local overloaded new operator.

::operator new() -> will call global inbuilt new operator.