【发布时间】:2019-12-09 09:19:46
【问题描述】:
我对这段代码有一个疑问:
#include <iostream>
#include <stdlib.h>
using namespace std;
void * operator new(size_t size)
{
cout << "New operator overloading " <<"\n";
void * p = malloc(size);
return p;
}
void operator delete(void * p)
{
cout << "Delete operator overloading " <<"\n";
free(p);
}
int main()
{
int n = 3, i;
int * p = new int[3];
for (i = 0; i<n; i++)
p[i]= i;
cout << "Array: ";
for(i = 0; i<n; i++)
cout << p[i] << " ";
cout << endl;
delete p;
}
int[3] 的大小如何作为参数传递给void * operator new(size_t size)?
看下面的代码,这行不通:
#include <iostream>
using namespace std;
void sizef(size_t n)
{
cout<<n;
}
int main()
{
sizef(int[5]);
}
请解释这是如何工作的。
【问题讨论】:
-
在这里检查签名(我认为您也需要数组的签名;特别是(2)和相应的运算符 delete ):en.cppreference.com/w/cpp/memory/new/operator_new
-
在你的情况下不会。分配数组时,编译器会生成
operator new[]()的调用,而不是operator new()。无论哪种方式,由于编译器可以看到新表达式,它知道正在分配什么以及所需的大小,因此将其传递给它选择的任何分配函数。
标签: c++ operator-overloading new-operator