调用int *a = new(__FILE__, __LINE__) int;
可以调用函数void* operator new(size_t , const char *, unsigned int );
。
它是如何工作的?
最佳答案
C++中的每个运算符都有特定的语法和语义要求,即使在重载后也必须遵守这些要求。例如。即使重载插入符号^
运算符来表示power
,您也不能指望它具有比乘法*
更高的优先级,在代数中就是这样。new
运算符具有以下语法要求。
new (arguments ... /*for specialized case*/) Type (initializer list);
new (arguments ... /*for specialized case*/) Type [size_t];
因此,要能够使用
void* operator new ( std::size_t count, void* ptr );
,必须编写以下代码。int main()
{
char arr[sizeof(int)];
int *a = new(arr) int;
}
虽然可以在没有任何故障的情况下调用
void* operator new ( std::size_t count );
。int main()
{
int *a = new int;
}
因此,除第一个参数(它会自动根据类型推导)以外的所有参数都应放在
new
和type
之间,并应包含在parenthesis
中。因此,在您的示例
int *a = new(__FILE__, __LINE__) int;
中,新的语法规则寻求operator new(std::size_t count, char const *, int)
关于c++ - 调用 'new'如何调用用户定义的展示位置分配功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40144788/