调用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;
}

因此,除第一个参数(它会自动根据类型推导)以外的所有参数都应放在newtype之间,并应包含在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/

10-11 23:04
查看更多