Atmel Studio 6没有针对C++的新运算符和删除运算符
Atmel Studio 6 no new and delete operators for C++
我在Atmel Studio 6中使用ATMega32 uc。我有一些包含new
运算符的代码。当我尝试使用它时,它说它没有定义,我不知道为什么。
我在谷歌上搜索了一些东西,但还没有找到任何相关的东西。我所能找到的只是定义new
和delete
运算符的代码片段,但我真的不想这样工作。此外,nullptr
丢失。
还有其他解决方案吗?
在嵌入式环境中使用动态内存管理是完全可能的,您只需要小心操作即可。在这种情况下,使用malloc()
和free()
可能更容易,但为了提高兼容性,您可能需要将它们定义为new
和delete
。AVR Freaks提供了有关该主题的良好信息来源。
这些运算符不存在的原因很简单,因为AVR-GCC并不完全支持C++,只支持它的一部分。这在一定程度上是由于嵌入式编程的本质-一些更先进的C++功能可以快速吞噬闪存和RAM。嵌入式平台上的C与C++之争是一个古老而激烈的争论,但通常归结为实际情况。这是关于这个主题的另一个论坛话题。
这听起来有点嵌入的东西。这不是一个罕见的情况,你只能使用C,而不能使用C++。
无论如何,new/delete和malloc()/free()在嵌入式世界中都不是一个好主意。您的程序在任何情况下都必须工作。没有办法失败。这只是n.a。你没有控制台或日志文件来写消息,或者如果你有一些,没有人会检查它,也没有人会处理错误。您可以闪烁红色led指示灯,但在大多数情况下,这是不允许的,例如踩下制动踏板应该操作制动器,而不是红色led二极管。
您应该设置固定大小的池,而不是动态分配/取消分配项目,并且您没有不处理任何可能的输入的选项。您的代码将充满"MAX_…"定义。
- 编译"运算符删除"时C++编译器如何工作?
- 删除 x 与 ::运算符删除 (x)
- 未找到匹配的运算符删除;如果初始化引发异常,内存将不会被释放
- 为什么在运算符删除中不调用析构函数?
- 如何在 C++ 中使用删除运算符删除单个数据
- C++对自动(堆栈)指针使用运算符删除
- C++运算符删除覆盖并不总是使用
- 带大小参数和不带大小参数的"运算符删除":当两者都可用时,选择哪一个?
- C++ 运算符删除重载对派生类不起作用
- 无法覆盖C++中纯抽象类中的运算符删除/新建
- 对运算符删除覆盖的工作方式感到困惑
- C++/析构函数-运算符删除
- C++can运算符删除失败,如果不是原因
- 如果我写一个新的展示位置?我应该如何编写普通运算符删除
- 删除与运算符删除(和无效指针)
- 使用单个删除运算符删除多个指针
- 如何实现 C "classes" 的 C++11 冒名顶替者的运算符删除?
- shared_ptr-运算符删除中的访问冲突
- 使用delete运算符删除结构中的元素
- 内存管理 - 目标 C++ 运算符删除