我可以在不使用new的情况下在C++中实现Factory Method模式吗?

Mat*_*och 7 c++ embedded avr factory-method avr-gcc

我在嵌入式环境(Arduino/AVR ATMega328)中工作,并希望在C++中实现Factory Method模式.但是,我正在使用的编译器(avr-gcc)不支持该new关键字.有没有办法在不使用的情况下实现这种模式new

Ski*_*izz 8

由于AVR编译器基于gcc编译器,因此很可能支持new关键字.你得到的错误究竟是什么?我猜它是一个未定义函数的链接/编译器错误,即operator new.new运算符和operator new之间存在差异,第一个用于创建对象,后者用于为对象分配内存.new运算符为正在创建的对象类型调用operator new,然后初始化对象的v-table并调用对象的构造函数.阅读此常见问题解答,它表示标准库中未定义operator new.这很容易解决,只需定义一个:

void *operator new (size_t size)
{
  return some allocated memory big enough to hold size bytes
}
Run Code Online (Sandbox Code Playgroud)

你还需要定义一个删除:

void operator delete (void *memory)
{
   free the memory
}
Run Code Online (Sandbox Code Playgroud)

唯一要添加的是内存管理,内存块的分配和释放.这可以简单地完成,小心不要破坏任何现有的已分配内存(代码,静态/全局数据,堆栈).您应该定义两个符号 - 一个用于空闲内存的开始,另一个用于空闲内存的结束.您可以动态分配和释放此区域中的任何内存块.您需要自己管理这个内存.