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