gpt4 book ai didi

c++ - 实际上什么返回类型有一个新的?

转载 作者:行者123 更新时间:2023-11-30 01:15:06 27 4
gpt4 key购买 nike

我读了thisthis文章,令我惊讶的是,我发现运算符有一个 void* 返回类型。

void* operator new (size_t size)
{
void *p=malloc(size);
if (p==0) // did malloc succeed?
throw std::bad_alloc(); // ANSI/ISO compliant behavior
return p;
}

但从另一方面来说,我们知道,new 返回一个对象而不是 void 指针。怎么可能?

好的,让我们对上面的代码做一点改动

void* _new (size_t size)
{
void *p=malloc(size);
if (p==0) // did malloc succeed?
throw std::bad_alloc(); // ANSI/ISO compliant behavior
return p;
}

现在,编译器会阻止与转换 void* 另一种类型有关的警告吗?

最佳答案

new 表达式的类型是指向正在创建的类型的指针。所以new int的类型是int*

operator new 是一个由 new 表达式调用的函数,用于分配内存来存储它正在创建的对象。它返回 void* 因为内存中还没有任何对象。 new 表达式然后在该内存中创建一个或多个对象,然后生成指向这些对象的正确类型的指针。

operator new(以及相应的operator delete)也可以直接调用来分配原始内存。例如,标准库容器使用的默认分配器 std::allocator 就是这样做的。

关于c++ - 实际上什么返回类型有一个新的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29106566/

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