Он всегда будет компилироваться без ошибок.
Хорошо, что передать указатель на функцию и удалить ее в этой функции является потенциально другой историей, в зависимости от специфики вашей программы.
Основная идея, которую вы должны учесть, - это «владение» заостренными данными. Когда вы передаете этот указатель, имеет ли вызывающая функция право собственности на передаваемые данные? то есть это единственное место, на которое можно ссылаться на этих данных? Вы отказываетесь от права собственности на данные с привязкой к данным, без каких-либо шансов, что вызывающая функция снова будет ссылаться на данные? Если да, то вы должны удалить его.
Если вызывающая функция может ссылаться на данные снова, вы не должны ее удалять.
Если есть другие ссылки на данные через различные структуры данных, тогда небезопасно удалять эти данные, если у вас нет какой-либо дисциплины в вашем коде, чтобы вы никогда не ссылались на данные снова из этих мест. Это трудно сделать и является источником многих ошибок программирования.
C++ tr1 shared_ptr < > - это умный указатель, который помогает в таких ситуациях - он управляет этой концепцией собственности, сохраняя счетчик ссылок, который отслеживает количество ссылок на данные. Если счетчик ссылок равен 1, то есть 1 ясный владелец. Если счетчик ссылок больше 1, тогда совместное использование собственности. Если счетчик ссылок равен 0, то больше нет ссылок на данные, а shared_ptr < > удалит его, когда вызывается деструктор shared_ptr < >.
То, что я всегда удивляю, заключается в том, что удаление указателя является законным, даже если оно 'const'. –