Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 放置新对象、放置在I/O寄存器和归零内存上的对象_C++_Embedded_Reinterpret Cast_Placement New_Ioports - Fatal编程技术网

C++ 放置新对象、放置在I/O寄存器和归零内存上的对象

C++ 放置新对象、放置在I/O寄存器和归零内存上的对象,c++,embedded,reinterpret-cast,placement-new,ioports,C++,Embedded,Reinterpret Cast,Placement New,Ioports,我一直在尝试在I/O空间上放置新的“映射”类,以节省一些内存: hardware::ioport *port = new(0xWHATEVER) hardware::ioport(); 它工作得很好,但是将字节数置零。“替代”解决方案 hardware::ioport*port=reinterpret\u cast(0xWHATEVER); 也可以工作,但不调用我实现的默认构造函数 有没有方法调用构造函数,但是在C++中? hardware::ioport *port = new(0xW

我一直在尝试在I/O空间上放置新的“映射”类,以节省一些内存:

hardware::ioport *port = new(0xWHATEVER) hardware::ioport();
它工作得很好,但是将字节数置零。“替代”解决方案

hardware::ioport*port=reinterpret\u cast(0xWHATEVER);
也可以工作,但不调用我实现的默认构造函数

有没有方法调用构造函数,但是在C++中?

  hardware::ioport *port = new(0xWHATEVER) hardware::ioport();
ioport()之后的()括号调用ioport类的pod成员的自动零初始化。显然,您不喜欢此功能,只需将其删除即可。修正:

  hardware::ioport *port = new(0xWHATEVER) hardware::ioport;

hardware::ioport
是如何定义的?另外,这个问题有点困惑:你想创建一个对象,但又不想修改任何内存?!斯蒂芬·德赫斯特(Stephen Dewhurst)在几年、十年或更长时间前的一次嵌入式East会议上展示了一个很好的例子,即使用模板将内存映射的I/O寄存器映射到类和对象,用于只读和读/写位值。我希望我能在网上找到一份引文。优化后的代码非常紧凑。从寄存器中读取结果,使用标准C++对象导致“负载间接通过常量”登记,我认为这是误导性的。如果有一个用户声明的构造函数,那么这两种初始化之间没有区别。无论哪种情况,pod成员都不会自动初始化,除非没有用户声明的默认构造函数。此外,无论是否有用户声明的构造函数,都不能保证第二个版本在实际初始化任何基和类成员之前不会将任何内容(零或保护模式)写入正在构造对象的空间,这是一个有效的实现选择。这是对的。我只是觉得我的构造函数被注释掉了,所以这个问题是错误的。与现有的构造函数似乎没有区别。
  hardware::ioport *port = new(0xWHATEVER) hardware::ioport;