gpt4 book ai didi

c++ - 为什么这个 C++ 'new' 运算符的实现有效?

转载 作者:太空狗 更新时间:2023-10-29 19:59:16 24 4
gpt4 key购买 nike

我发现 AVR uC 的 C++ 编译器不支持 newdelete 运算符,但还有一个快速修复方法:

void * operator new(size_t size) 
{
return malloc(size);
}

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

我假设现在可以调用 new ClassName(args);

但是,我不太确定这是如何工作的。例如,这里实际返回一个 size_t 的是什么?我以为构造函数不返回任何东西...

难道 new 现在应该以不同的方式使用(与 sizeof() 结合使用)?

最佳答案

new T(args); 大致等同于以下内容。

void* storage = operator new(sizeof(T)); // obtain raw storage
call_constructor<T>(storage, args); // make an object in it

(这里call_constructor应该调用T的构造函数使得storage成为该构造函数中的 this 指针。)

operator new 部分获取请求的原始存储量,构造函数调用是通过调用构造函数实际创建对象的调用。

题目中的代码只是替换了operator new部分,即存储的检索。当您使用 new T(args) 时,sizeof 部分和构造函数调用都由编译器自动完成。


† 该语言有一种方法来表达这种直接的构造函数调用,称为“placement new”,但为了清楚起见,我省略了它。

关于c++ - 为什么这个 C++ 'new' 运算符的实现有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14235180/

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