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]
对象中。
我在层次结构中有一些 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]
对象中。