Освобождаются ли массивы в структурах при удалении? - PullRequest
2 голосов
/ 03 декабря 2011

Если бы я использовал что-то подобное в C ++,

struct socket_t {
    sockaddr_in address;
    char buffer[2048];
    int FD;
}

socket_t *clients[256];
memset(clients, 0, 256);

, а затем создавать в нем объекты,

socket_t **free = (socket_t**) memchr(clients, 0, 256);
*free = new socket_t;

, а затем используйте delete на некоторых элементах,

delete clients[index];

будут ли все члены благополучно освобождены (особенно буфер)?

Я не хочу тратить 2 КиБ на каждый предмет, который я создаю.

Я спрашиваю об этом, потому что заметил, что sizeof возвращает количество байтов, используемых при объявлении массива с type[2048], но размер указателя, если он объявлен с type*.

1 Ответ

4 голосов
/ 03 декабря 2011

Массив в вашей структуре является автоматическим объектом, время жизни которого связано с экземпляром структуры.Так что да, когда вы удаляете экземпляр структуры, память массива также автоматически освобождается.Это верно для всех не указателей членов.

...