Что происходит в этом конструкторе и деструкторе? - PullRequest
0 голосов
/ 07 мая 2020

так как много лет я должен вернуться к использованию c ++. Я немного заржавел, может кто-нибудь объяснить мне, что происходит при конструировании и деконструировании объекта в основной функции.

Код работает как задумано. Странно то, что если я отлаживаю код, отладчик останавливает выполнение два раза, при построении класса и 3 раза при уничтожении. Но он останавливается в части кода, где нет отладочной информации (да, g cc генерирует мне отладочную информацию). Я хотел исследовать это, но я не совсем уверен, что код действительно делает.

Вот код:

class LSPI_BusSymulation_SlaveDevice;

class LSPI_BusSymulation{
public:
    LSPI_BusSymulation(uint16_t dataSizePerDevice, uint16_t maxNumberOfDevices, uint16_t actualNumberOfDevices);
private:
    uint16_t actualNumberOfDevices;
    std::vector<LSPI_BusSymulation_SlaveDevice> devices;
    std::vector<uint8_t> recvData;
};

class LSPI_BusSymulation_SlaveDevice{
public:
    LSPI_BusSymulation_SlaveDevice(uint16_t processDataSizePerDevice, uint16_t maxNumberOfDevices);
private:
    uint16_t dataSizePerDevice;
    std::vector<uint8_t> data;
};

LSPI_BusSymulation::LSPI_BusSymulation(uint16_t dataSizePerDevice, uint16_t maxNumberOfDevices, uint16_t actualNumberOfDevices)
    : actualNumberOfDevices(actualNumberOfDevices){    
    recvData.resize(dataSizePerDevice * (maxNumberOfDevices + 1));
    devices.assign(actualNumberOfDevices, LSPI_BusSymulation_SlaveDevice(dataSizePerDevice, maxNumberOfDevices));
}

LSPI_BusSymulation_SlaveDevice::LSPI_BusSymulation_SlaveDevice(uint16_t processDataSizePerDevice, uint16_t maxNumberOfDevices)
    : dataSizePerDevice(processDataSizePerDevice){
    data.resize(processDataSizePerDevice * (maxNumberOfDevices + 1 + 1));
}

int main(){    
    LSPI_BusSymulation busSymulation(10, 10, 10);
    return 0;
}

Для меня важны следующие вопросы: (Но если у вас есть время, пошаговое объяснение тоже может помочь)

Как часто будет вызываются конструктор и деструктор LSPI_SYMULATION_SLAVE_DEVICE?

Все ли объекты, хранящиеся в busSymulation.devices, разделяют объекты своей собственной памятью?

Копируется ли вектор busSymulation.devices [n] .data или выполняется устройства используют один вектор данных?

1 Ответ

0 голосов
/ 07 мая 2020

Как часто будет вызываться конструктор и деструктор LSPI_SYMULATION_SLAVE_DEVICE?

Конструктор

LSPI_BusSymulation_SlaveDevice::LSPI_BusSymulation_SlaveDevice(uint16_t processDataSizePerDevice, uint16_t maxNumberOfDevices)

вызывается один раз. Конструктор копирования вызывается 10 раз. Desctructor вызывается 11 раз.

Все ли объекты, хранящиеся в busSymulation.devices, разделяют объекты своей собственной памятью?

Да

Есть вектор busSymulation.devices [n] .data также скопирован, или устройства используют один вектор данных?

Он скопирован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...