Здравствуйте. Как правильно инициализировать класс внутри метода другого класса?
Данный код рабочий, но есть сомнения, что есть более правильные способы.
Как правильно описать инстанс класса в .h файле, чтобы он не инициализировался сразу без параметров, а дать ему понять, что он будет инициализироватся позже, например, в методе класса или его конструкторе?
// SensorDht.h
class SensorDht {
private:
DHT* dht;
uint8_t pin;
uint8_t type;
public:
SensorDht(uint8_t pin, uint8_t type);
void init();
};
// SensorDht.cpp
SensorDht::SensorDht(uint8_t pin, uint8_t type) {
this->pin = pin;
this->type = type;
}
void SensorDht::init() {
DHT instance(this->pin, this->type);
this->dht = &instance;
this->dht->begin();
}
UPD: Способ не совсем рабочий, дальше по коду я получаю исключение:
stack smashing protector failure esp32
Если инициализировать вот так, то все работает хорошо, но требует дополнительной инициализации в коде, чего хотелось бы избежать для чистоты кода:
DHT dht(GPIO_NUM_17, DHT22);
SensorDht sensor_dht(&config, &dht);
SensorDht::SensorDht(Config* config, DHT* dht) {
this->config = config;
this->dht = dht;
}
void SensorDht::init() {
this->dht->begin();
}