Я хочу использовать std::shared_ptr
и std::list
для моей проблемы (привязанность к памяти), обратите внимание, что мне нужно связать с каким-то унаследованным кодом на C, который требует необработанных указателей и моя главная цель состоит в том, чтобы иметь вид динамического управления памятью (может вернуть память всякий раз, когда это возможно), мой psudo-код следующий,Управление памятью с помощью std :: list и std :: shared_ptr
// My "central" storage
typedef std::shared_ptr<double> data_type;
std::list<data_type> dynamic_storage;
// At each allocation point
dynamic_storage.push_back(data_type());
dynamic_storage.back.reset(new double[N],std::default_delete<double[]>());
// immediately after each allocation, store the shared_ptr to some map
std::map<data_type> map_for_job1; // may have several maps
int index; // unique index for later access, related to domain-specific problem
data_type ptr_in_map(dynamic_storage.back()); // reference counter +1
map_for_job1[index]=ptr_in_map; // store in map
// when I want to access again with a certain map and index
double *raw_data = map_for_job1.find(index).get();
// when I'm done with all the resources shared by buffer_map_1
map_for_job1.clear(); // reference counter -1
for (std::list<data_type>::iterator it=dynamic_storage.begin(); it != dynamic_storage.end(); ++it)
{
if (*it.use_count()==1)
dynamic_storage.erase(i) // release resource from central storage
}
Итак, мои вопросы,
- является ли это пригодная память шаблон управления?
- Как улучшить, возможно, переместить список слишком дорого?
Существует несколько шаблонов управления памятью, поэтому на самом деле нет ни одного «действительного»; вы считали [используя существующий] (http://stackoverflow.com/questions/1194479/write-your-own-memory-manager)? –