Вначале был С. И было у С четыре всадника: malloc, calloc, realloc и free. И
справлялись они со своими задачами отлично.
Нужна память? Хуярь malloc!
Нужна память забитая нулями? Хуярь calloc!
Решил, что надо бы enlarge your array? Хуярь realloc! Он и размер области
памяти увеличит, и данные в новое место скопирует, если in place увеличить не
удалось. Хуле б не скопировать, когда все данные можно побитово копировать.
Потом пришёл С++, с его ООП, архитектуркой и КОКОКО^W new и delete. И что
теперь? Нет у тебя больше инструмента для in place увеличения размера массивов,
анон. На каждый чих будь добр «new, copy, delete», вообще охуеть. А всё почему,
а всё потому что во главу угла поставили эти модные словечки new и delete.
Зачем? Ведь придумали же такую годноту как allocator! Вокруг него нужно было
функционал закручивать. А вместо этого, закрутили вокруг new и delete, и в
терминах этих самых new и delete оказалось невозможно реализовать reallocate.
Вот смотри, анон. У аллокатора есть такие охуенные функции как allocate и
construct через которые замечательно реализуется new в его классическом
понимании, и destroy и deallocate, которыми можно сделать delete в любом его
понимании. Осталось сделать reallocate, который по служебной структуре в начале
блока памяти (1 бит на каждый выделенный объект) вызовет конструктор
копирования для всех уже сконструированных объектов, и просто нихуя не
скопирует для всех остальных объектов.
После этого, по аналогии с cin, cout, нужно экспортировать из libstdc++.so
глобальный allocator<void> и всё, получаешь полный контроль на памятью с
дешёвыми realloc'ами.
hirthwork
16.12.2012 12:29 mcabber
Do you really want to delete ?