Существует много вопросов, обсуждающих детали C и С++, касающиеся удаления указателя на константу, а именно: free()
не принимает их и что delete
и delete[]
do и эта константа не препятствует объекту разрушение.
Я заинтересован в том, считаете ли вы, что это хорошая практика, а не то, что позволяют языки (C и С++).
Аргументы для удаления указателя на константу включают:
- Линус Торвальдс
kfree()
, в отличие от Cfree()
, принимает аргументvoid const*
, потому что он считает, что освобождение памяти не влияет на то, на что указывает. -
free()
был разработан до введения ключевого слова const. - Операторы удаления С++ позволяют удалять данные const.
Аргументы против него включают:
- Программисты не ожидают, что данные будут изменены (или удалены), когда они передадут ему указатель-константу.
- Многие считают, что указатель на константу подразумевает не получение права собственности на данные (но не то, что не-const будет подразумевать получение прав собственности).
- Это обычная практика, наблюдаемая в большинстве библиотек и существующем коде.
Просьба аргументировать свои ответы и, возможно, обратиться к властям. Мое намерение состоит не в том, чтобы начать опрос здесь.