Лучший способ решить эту проблему - использовать интеллектуальный указатель совместного владения, например shared_ptr
, который можно найти в Boost, C ++ TR1 и C ++ 0x.
Умный указатель - это контейнер, который управляет временем жизни вашего динамически размещенного объекта. Он берет на себя ответственность за delete
объект, когда вы его используете.
С помощью интеллектуального указателя общего владения вы можете иметь несколько интеллектуальных указателей, которые все совместно владеют динамически распределяемым объектом. Ведется счетчик ссылок, который отслеживает, сколько умных указателей владеют объектом, и когда последний владелец умного указателя уничтожается, динамически размещаемый объект равен delete
d.
Крайне сложно управлять ресурсами в C ++ вручную, и очень легко написать код, который выглядит правильно и работает в большинстве случаев, но все же не правильно. Используя интеллектуальные указатели и другие контейнеры-владельцы ресурсов (например, контейнеры стандартной библиотеки), вам больше не нужно управлять ресурсами вручную. Правильно написать правильный код значительно проще, когда все управление вашими ресурсами происходит автоматически.
Автоматическое управление ресурсами в C ++ осуществляется с помощью шаблона проектирования под названием Получение ресурсов - инициализация (RAII) , который, возможно, является наиболее важным шаблоном проектирования, с которым вы, как программист C ++, должны быть знакомы.