我试图理解新的运算符重载,这意味着我对此深感困惑,我的问题在这里?
关于全局超载我找到了这个链接 How do I call the original "operator new" if I have overloaded it?,但我的本地重载新运营商呢。如果有人对我的问题作出澄清,那对我来说太过分了。
除此之外,我需要知道哪个是本地或全局重载新运算符的最佳方法(可能取决于我的设计)仍然需要了解最佳设计和性能目的。谢谢是提前
答案 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.