我在嵌入式环境(Arduino / AVR ATMega328)中工作,并希望在C中实现Factory Method模式.但是,我正在使用的编译器(avr-
gcc)不支持new关键字.有没有办法在不使用新的情况下实现这种模式?
解决方法
由于AVR编译器基于gcc编译器,因此很可能支持new关键字.你得到的错误究竟是什么?我猜它是一个未定义函数的链接/编译器错误,即operator new. new运算符和operator new之间存在差异,第一个用于创建对象,后者用于为对象分配内存. new运算符为正在创建的对象类型调用operator new,然后初始化对象的v-table并调用对象的构造函数.
Reading this FAQ它说标准库中没有定义operator new.这很容易解决,只需定义一个:
void *operator new (size_t size) { return some allocated memory big enough to hold size bytes }
你还需要定义一个删除:
void operator delete (void *memory) { free the memory }
唯一要添加的是内存管理,内存块的分配和释放.这可以简单地完成,小心不要破坏任何现有的已分配内存(代码,静态/全局数据,堆栈).您应该定义两个符号 – 一个用于空闲内存的开始,另一个用于空闲内存的结束.您可以动态分配和释放此区域中的任何内存块.您需要自己管理这个内存.