Использование и определение класса деструктора
Я создал класс для TFT-кнопок и сообщений при использовании сенсорного дисплея Wemos 2.4 tft.
В коде я использую около 12 кнопок (3 разных экрана с 4 кнопками на каждом экране ), например, в моем коде управления домом "Главный экран" имеет подсветку
, сигналы тревоги Windows
, температуру
, и на каждом экране ниже есть множество других.
Так как кнопка, средняя продолжительность жизни только для текущего экрана (также в цикле()
, поскольку он дисплее нажмите на определенное место), и каждая кнопка уйдет не мало ресурсов, как показано ниже в lib же .сек
файл (другой класс с функцией касания не показывают здесь), я хотел бы знать, как создать деструктор, чтобы освободить место, так как основные ресурсы, используемые в MessageTFT
класса.
#ifndef TFT_GUI_h
#define TFT_GUI_h
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <XPT2046_Touchscreen.h>
extern XPT2046_Touchscreen ts; /* Сенсорный экран */
extern Adafruit_ILI9341 tft; /* Графика */
const uint8_t _pos_corr_factor[3] = {3, 6, 9}; /* Центрируйте текст внутри поля */
class MessageTFT
{
public:
uint8_t a, b;
int xc, yc;
uint8_t txt_size = 1;
uint8_t screen_rotation = 0;
uint8_t border_thickness = 1;
uint16_t face_color = ILI9341_GREEN;
uint16_t border_color = ILI9341_RED;
uint16_t txt_color = ILI9341_BLACK;
char txt_buf[30];
bool roundRect = false;
public:
MessageTFT(Adafruit_ILI9341 &_tft);
void drawMSG();
void text(char *txt);
private:
uint8_t _radius = 15;
private:
void _drawFace();
void _drawBorder();
void _put_text();
};
#endif
@Guy . D, 👍1
Обсуждение1 ответ
Лучший ответ:
Деструкторы, несмотря на их название, не используются для уничтожения объекта. Вместо этого они являются "крючком", который вызывается при уничтожении объекта. Подобно тому, как "конструктор" вызывается при создании объекта - он не создает.
Деструктор предназначен для "очистки" объекта перед его удалением. Это обычно влечет за собой освобождение любой памяти, выделенной объектом во время выполнения (через malloc ()
, new
и т. Д.).
Поскольку вы не делаете во время выполнения ничего, что нужно очистить, вашему деструктору нечего делать. Все ваши переменные-это простая статически выделенная память, как часть самого объекта, поэтому они автоматически уничтожаются при уничтожении объекта.
Вы можете думать об этом как о том, чтобы раздавить машину. Сиденья, двигатель и рулевое колесо-все это раздавлено, и вам не нужно об этом беспокоиться. Но сначала вы хотите вытащить собаку из багажника - вы действительно не хотите, чтобы он был там, когда машина будет раздавлена, все станет очень-очень грязно, и собака будет потеряна навсегда ... :(
Почему в багажнике машины собака, @Dave Newton
@DaveNewton, чтобы он не мешал вам во время вождения. Это поместье, а не седан., @Majenko
*лол-фью* Просто хотел убедиться, что с собачкой все в порядке ;), @Dave Newton
@DaveNewton До тех пор, пока вы вынимаете его из машины, прежде чем раздавить, да., @Majenko
Есть ли способ уничтожить экземпляр? оставив собаку в покое..., @Guy . D
@Парень.D Если вы создали его как локальную переменную (не используя " new "и не имея его "static" или в глобальной области видимости), то он уничтожается, когда выходит за пределы области видимости. Если вы сделали это с помощью "нового", то вы можете "удалить" его в любое время. Если он находится в глобальном масштабе, то он там навсегда., @Majenko
@Majenko поскольку он должен работать в loop ()
, чтобы обнаружить прикосновение, он должен быть глобальным.... TNX, @Guy . D
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Ошибка: "недопустимое использование нестатической функции-члена" при вызове функции из моего собственного класса-метода
- Массив динамического размера в качестве члена класса
- Как перебрать объекты или передать объект функции?
- C++ Undefined reference to 'Class:Function()'
- Прерывания внутри класса, связанные с функцией класса
- Присоедините функцию Arduino ISR к члену класса
- Недопустимое использование нестатической функции-члена
Я не вижу ничего в кнопке, которая нуждается в очистке при уничтожении. Деструкторы используются для очистки динамических ресурсов экземпляра (например, памяти malloc-ed)., @Dave Newton