gpt4 book ai didi

c++ - call 'new' 是如何调用自定义放置分配函数的?

转载 作者:行者123 更新时间:2023-11-30 01:42:05 26 4
gpt4 key购买 nike

调用 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 之间,并且应该放在 括号中

因此,在您的示例 int *a = new(__FILE__, __LINE__) int; 中,new 的语法规则寻找 operator new(std::size_t 计数, char const *, int)

关于c++ - call 'new' 是如何调用自定义放置分配函数的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40144788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com