【发布时间】:2013-01-09 12:26:08
【问题描述】:
我发现 AVR uC 的 C++ 编译器不支持 new 和 delete 运算符,但也有一个快速修复:
void * operator new(size_t size)
{
return malloc(size);
}
void operator delete(void * ptr)
{
free(ptr);
}
我假设现在可以拨打new ClassName(args);。
但是,我不确定这是如何工作的。例如,这里实际返回size_t 的是什么?我认为构造函数不会返回任何东西......
难道new 现在应该以不同的方式使用(与sizeof() 一起使用)?
【问题讨论】:
-
不要混淆 new 和 operator new。是的,这有点棘手。您正在重载的 operator new 只是分配内存。您可以使用 malloc 或特殊的内存池,也可以对其进行装饰以帮助检测内存泄漏和无效删除等。
-
这是否意味着它实际上根本没有实例化类或什么?你说的我有点困惑。
-
始终牢记运算符 new(可以重载)和 new 表达式(通常用于在代码中创建新对象)是两个不同的东西。
-
@PlasmaHH,好吧,我不知道。希望编译器支持新的表达式。
-
@Yannbane:如果没有,它就不是 C++ 编译器。
标签: c++ memory malloc avr libc