Правильное использование для удаления данных в структуре, на которую указывает указатель - PullRequest
0 голосов
/ 16 февраля 2012

Я пытаюсь понять, как правильно освободить память, на которую указывает. В этом случае указатель указывает на новый экземпляр структуры. Пример показан ниже

Структура выглядит так:

    struct MyData
    {
        unsigned short int MYID;    
        unsigned short int MYCMD;    
    }; 

Определение ниже.

    MyData* injdataRx;

    myDataPtr = new MyData;  // create new instance

... делать что-то с загрузкой значений в то, на что указывает указатель, т.е. поля.

Теперь, когда я закончу с этой структурой и захочу обеспечить освобождение того, на что указывает указатель (выделенная область), я делаю это.

    delete (myDataPtr);

Освобождает ли это память, созданную «новым», так как он знает, что поскольку myDataPtr является указателем на тип MyData, он освобождает размер MyData? Это то, что происходит?

Любая помощь в разъяснении этого приветствуется.

Ответы [ 2 ]

1 голос
/ 16 февраля 2012

Да, это так.В основном, когда вы вызываете new, количество выделенных байтов записывается где-то (это не указано стандартом и зависит от реализации).В любом случае, когда вы вызываете delete, на это число байтов ссылаются, и именно так система знает, сколько байтов нужно освободить, даже если вы этого не сказали.Бухгалтерский учет ведется за кулисами.

0 голосов
/ 16 февраля 2012

Как уже сказали в комментариях ildjarn и Duck, ответ - ДА.

MyData * p;
p = new MyData;
delete (p);     // <- Yes, this frees the memory used for MyData.
...