c++ - 没有 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
解决方案
假设地址 0x1 的内存已分配,您可以使用placement new:
Foo *myClass = new(0x1) Foo;
要破坏您的对象,您可以手动调用析构函数:
myClass->~Foo();
推荐阅读
- docker - Docker 保存不同的镜像和容器
- mysql - 存储订单项目和项目可以有子项目有什么不同的方式?
- java - 静态变量的异常
- html - 材料分页下拉不合适
- npm - Npm 发布到私有范围不断失败
- python - 清理推文的问题(表情符号,笑脸......)
- vb.net - 从 vb.net 上的文本文件写入文本框
- angularjs - 是否可以在 angularjs 中使用表单属性进行表单验证?
- java - 即使正确导入 Java 11 方法,IntelliJ 也无法识别它们
- mysql - Mysql sys_exec 无法打开共享库'lib_mysqludf_sys.so'(错误号:11,错误的 ELF 类:ELFCLASS32)