указатели в структуре утечки памяти? - PullRequest
0 голосов
/ 01 апреля 2010

Я не могу найти упоминаний об этом в Интернете ... не будет ли плохо указывать указатель на структуру? (по крайней мере, в современном объектно-ориентированном программировании) Программист неизбежно создает утечку памяти правильно? (если они, каждый раз, когда они используют это, они разъединяют память каждый раз)

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

1 Ответ

1 голос
/ 01 апреля 2010

Предполагая, что речь идет о C ++, помещать тупой указатель в struct действительно опасно, если этот указатель ссылается на объект (или массив объектов), который принадлежит экземпляру struct (то есть экземпляр отвечает за правильное удаление объекта).

Копирование экземпляра struct означает копирование всех его членов. После этого вы получите несколько экземпляров этого struct с указателями на один и тот же объект. Когда все эти экземпляры будут удалены, вам придется удалить объект, на который указывает указатель. Однако, если один из них собирается быть удаленным, часто трудно определить, есть ли где-нибудь еще другие экземпляры.

Выходом из этого будет подсчет ссылок, осуществляемый умными конструкторами, деструкторами и присваиванием. К счастью, вам не нужно реализовывать это самостоятельно, поскольку это уже сделано в так называемом умном указателе. Либо ваша стандартная библиотека поставляется с TR1 std::tr1::shared_ptr, либо она уже поставляется с C 101 11 std::shared_ptr, либо вы можете загрузить библиотеки повышения и использовать их boost::shared_ptr.

...