gpt4 book ai didi

c++ - 哪个新运算符将被称为 new 或 new[]?

转载 作者:搜寻专家 更新时间:2023-10-31 01:33:55 25 4
gpt4 key购买 nike

在下面的程序中,重载的 operator new [] 被调用。但是如果我评论这个函数,那么我的重载 operator new 就会被调用。它不应该调用 default new [] 运算符吗?

#include <iostream>
#include <stdlib.h>
using namespace std;

void *operator new (size_t os)
{
cout<<"size : "<<os<<endl;
void *t;
t=malloc(os);
if (t==NULL)
{}
return (t);
}

//! Comment This below function
void* operator new[](size_t size){
void* p;
cout << "In overloaded new[]" << endl;
p = malloc(size);
cout << "size :" << size << endl;
if(!p){
}
return p;
}

void operator delete(void *ss) {free(ss);}

int main ()
{
int *t=new int[10];
delete t;
}

最佳答案

查看the reference ,我们看到:

  1. void* operator new ( std::size_t count );
    Called by non-array new-expressions to allocate storage required for a single object. […]

  2. void* operator new[]( std::size_t count );
    Called by the array form of new[]-expressions to allocate all storage required for an array (including possible new-expression overhead). The standard library implementation calls version (1)

因此,如果您重载版本 (1) 但重载版本 (2),您的行

int *t = new int[10];

将调用标准库的operator new []。但是,这又会调用您已重载的 operator new(size_t)

关于c++ - 哪个新运算符将被称为 new 或 new[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40483992/

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