Кроме того, довольно легко учесть этот проектный пункт: просто выделите объекты как struct
и сохраните размер как элемент внутри этого struct
. Ваш код, который вызывает освобождающий элемент, теперь знает, какое значение предоставить, поскольку оно содержится в самой структуре.
Делая это, вы, по сути, делаете именно то, что любая реализация на другом языке может любезно делать для вас. Вы просто делаете то же самое явно.
Теперь, учитывая, что мы говорим о C ++, в который уже встроена куча отличных контейнерных классов, я искренне рекомендую вам избегать «катания своего собственного», если вы можете этого избежать. Просто найдите способ использовать один из изящных контейнерных классов, которые язык и стандартная библиотека уже предоставляют.
В противном случае не забудьте упаковать то, что вы здесь создаете, как собственный контейнерный класс. Убедитесь, что логика, которая имеет дело с распределителем и освободителем, встречается в вашей программе только один раз. (А именно, внутри этого класса.) Щедро добавьте в него логику, специально разработанную для обнаружения ошибок. (Например, контрольное значение, которое вставляется в объект при его выделении, и которое должно быть найдено, когда объект освобождается, и которое стирается непосредственно перед этим. Явные проверки сохраненного значения размера, чтобы сделать уверен, что это имеет смысл. И так далее.)
person
Mike Robinson
schedule
04.08.2016
free
библиотеки C знает, а реализацияdelete []
библиотеки C ++ тоже делает это независимо. - person Kuba hasn't forgotten Monica   schedule 04.08.2016operator delete
, следует этому новому принципу. Найдите презентацию, если вы этому не верите, или для подробного объяснения причин. - person JDługosz   schedule 05.08.2016