Cpp Instance in Instance in ...存在

Cpp Instance in Instance in... existance

我在层次结构中有一些 classes。所以让我们先调用 class 硬件,它接收和发送数据,它的每个实例都有一些独特的参数。让它成为:

class Hardware{
  private:
    SPI_TypeDef** Instance; 
    GPIO_Port* Port;
    GPIO_Pin Pin;
    int Settings;
  public
    Hardware();
    Hardware(GPIO_Port* Port, GPIO_Pin Pin, SPI_HandleTypeDef* SPIx);
    void TXRX_Data(Byte* TxBuf, Byte* RxBuf, int Length);
};

然后我有 class,控制外部设备,每个设备都有自己的 CS(因为它是 SPI):

class Device{
    private: 
       Hardware Sender;
       Byte Parameter_Buffer;
    public: 
       Device();
       Device(GPIO_Port* Port, GPIO_Pin Pin, SPI_HandleTypeDef* SPIx);
       void SendParameter(Byte Param);
       Byte GetParameter();
};

它的构造函数就是

Device::Device(GPIO_Port* Port, GPIO_Pin Pin, SPI_HandleTypeDef* SPIx){
   this->Sender = Hardware(GPIO_Port* Port, GPIO_Pin Pin, SPI_HandleTypeDef* SPIx);
}

之后就是我的主控了class

class DeviceArray{
private:
   Device Devices[DEVICE_QUANTITY];
   Byte Parameters_Buff[DEVICE_QUANTITY];
public:
   DeviceArray();
   DeviceArray(GPIO_Port** Ports, GPIO_Pin* Pins, SPI_HandleTypeDef* SPIx);
   void SendParameters(Byte* Params);
   Byte* GetParameters();
}

它的构造函数是:

DeviceArray::DeviceArray(GPIO_Port** Ports, GPIO_Pin* Pins, SPI_HandleTypeDef* SPIx){
    for(uint8_t i = 0;i < DEVICE_QUANTITY; i++){
         this->Devices[i] = Device(Ports[i], Pins[i],SPIx);
    }  
}

我的程序中只有这个 class 的一个对象,它将是全局对象。

而且我想知道DeviceArray构造函数关闭后是否会删除Device实例及其参数。硬件(发送方)实例也是如此。

给定的代码很抽象,但它与我要编写的程序非常相似。

And I wonder if instances of Device and their parameters will not be deleted after DeviceArray constructor is closed. And the same is for Hardware (Sender) instances.

是的,两种类型的实例都会被销毁,但这没关系。

例如行

this->Devices[i] = Device(Ports[i], Pins[i],SPIx);

创建一个临时的 Device 对象,它将在语句结束时被销毁,但这并不重要,因为在此之前 = 将调用 [=11 的隐式移动赋值运算符=] 这会将临时 Device 对象的成员移动到 this->Devices[i] 对象中。