首页 > 解决方案 > 没有 new 的 C++ 构造函数

问题描述

我正在尝试在嵌入式应用程序中使用 c++。我遇到了一个理论问题

鉴于我没有动态分配,我不使用“新”运算符。问题是关于为对象和析构函数调用构造函数。

我想把我的对象放在内存中的 x 地址。我这样声明:

Foo *myClass = (Foo *) 0x1; //for example
//I guess i need to call constructor manually ?
myClass->myClass();

那么调用构造函数然后手动调用它的解决方案是什么。我应该自己做一个新的操作员吗?例如

void * operator new(size_t size, uint32_t address)
{
  return (void *)(address); 
}

编译器使用 arm-none-eabi-g++,目标 armv7-m

标签: c++embedded

解决方案


假设地址 0x1 的内存已分配,您可以使用placement new

Foo *myClass = new(0x1) Foo;

要破坏您的对象,您可以手动调用析构函数:

myClass->~Foo();

推荐阅读