C++ placement new operator是否禁用默认的new operator?
我有一个这样的代码片段C++ placement new operator是否禁用默认的new operator?,c++,new-operator,C++,New Operator,我有一个这样的代码片段 #include <cstring> #define DISABLE_DEFAULT_NEW \ void* operator new(size_t aSize, void* aPtr); \ void operator delete(void* aPtr); class A { publ
#include <cstring>
#define DISABLE_DEFAULT_NEW \
void* operator new(size_t aSize, void* aPtr); \
void operator delete(void* aPtr);
class A
{
public:
DISABLE_DEFAULT_NEW
A() {}
};
int
main()
{
A* a = new A();
return 0;
}
disable_new.cpp:17:10: error: no matching function for call to 'operator new'
A* a = new A();
^
disable_new.cpp:9:3: note: candidate function not viable: requires 2 arguments, but 1 was provided
DISABLE_DEFAULT_NEW
^
disable_new.cpp:3:9: note: expanded from macro 'DISABLE_DEFAULT_NEW'
void* operator new(size_t aSize, void* aPtr); \
^
1 error generated.
我的问题是默认的新操作符去哪里?我希望new still work的默认语法是正确的,规范中有没有提到它 它们只是隐藏了全局的。如果在类范围内提供
(强调矿山)
新表达式首先在类范围中查找适当的分配函数的名称,然后在全局范围中查找。请注意,根据,在类作用域中声明的任何分配函数都会隐藏尝试分配此类对象的新表达式的所有全局分配函数
这意味着,如果在类中定义任何运算符new
,则也必须在类中定义其他必要的形式,例如
class A
{
public:
DISABLE_DEFAULT_NEW
A() {}
void* operator new ( std::size_t count ) { return ::operator new(count); } // forward to global operator new
};
这有用吗?