使用malloc初始化类

Ham*_*aya 2 c c++ embedded gcc g++

我正在使用C++作为中间语言的avr玩具语言,问题是avr-gcc没有新的实现.我的所有对象都来自Object类,它具有虚拟方法,当我使用malloc使用malloc创建一个浮动对象时,

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

一旦我将它转换为一个Object来传递给Float我的程序崩溃了,答案中的评论说这是由于vtable没有正确初始化,所以如何创建一个c ++对象而不使用new并拥有vtable设置正确吗?

Ken*_*oom 5

似乎new支持一种语言结构,但是operator new没有实现作为其基础并进行实际分配的代码.

通过operator new在源代码中提供自己的实现来解决这个问题应该很容易:

在某些头文件中包含在任何需要的文件中 new

#include <stdlib.h> 

void * operator new(size_t size); 
void operator delete(void * ptr);
Run Code Online (Sandbox Code Playgroud)

在单个cpp文件中.

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

void operator delete(void * ptr) 
{ 
  free(ptr); 
} 
Run Code Online (Sandbox Code Playgroud)

来源:avrfreaks.net上的这篇文章,其中还包含您可能想要/需要自己实施的其他一些内容的信息.