Объект «вызывающий-backer», содержащий обратный вызов (тот, кто выполняет обратные вызовы к нему), может быть надлежащим владельцем (определяющим время жизни обратного вызова и, в частности, использующим delete
, чтобы покончить с объектом обратного вызова , удерживая его с auto_ptr
и т. д.) тогда и только тогда, когда его семантика такова, что он позволяет определить, когда больше не понадобятся никакие обратные вызовы - это невозможно отличить по такой скудной информации, которая представлена в вопросе.
Вам также могут понадобиться способы для кода, который создает обратный вызов (и передает владение им вызывающей стороне), чтобы явно попросить "вызывающую вызывающую сторону" удалить объект обратного вызова (и выполнить больше никаких обратных вызовов), когда указанный код определяет, что больше никаких обратных вызовов больше не потребуется.
В других ответах упоминаются более умные указатели, чем auto_ptr
, чтобы заставить проблемы исчезать из-за того, «кому это принадлежит» (буст shared_ptr
, подсчет ссылок, свернутый вручную, ...) - это может быть хорошо, если вас заставляют использовать C ++ по другим причинам, но на самом деле тоскливо по языку со сборщиком мусора, но, если вы выберете C ++ именно потому, что он дает вам полный контроль над использованием памяти, то правильное определение владения объектом и проблем времени жизни не является обязательным (и это может серьезно оптимизировать использование ресурсов по сравнению с любым более или менее автоматизированным «сборщиком мусора» - это важно только тогда, когда вам нужно , конечно же, нужно тщательно контролировать использование ресурсов; -).