Библиотека C++ Boost - передача общего указателя на функцию

Предполагая, что общий указатель может быть создан следующим образом

typedef boost::shared_ptr<Employee_t> srdpointer;     
srdpointer ptr((Employee_t*)malloc(sizeof(Employee_t)),std::ptr_fun(free));

Мне нужно передать общий указатель, который будет выделять память, указанную указателем ptr. Что-то вроде этого.

void allocateBlocks(int **ptr, int *cnt)
{
    *ptr = (int*)malloc(sizeof(int) * 10);
    *cnt = 10;
    /*do something*/ 
}

int main()
{
    int *p = NULL;
    int count = 0;
    locateBlocks(&p, &count);

    /*do something*/

    free(p);
}

Как я могу добиться аналогичной функциональности, используя shared_ptr, как показано в приведенном выше коде.


person om sarathe    schedule 05.09.2012    source источник
comment
могу я спросить, почему вы используете malloc, а не new?   -  person Default    schedule 05.09.2012
comment
Похоже, что std::vector‹int› удовлетворит ваши потребности.   -  person Greg    schedule 05.09.2012
comment
Знаете ли вы, что reset()ing экземпляр shared_ptr с новым указателем не меняет другие экземпляры shared_ptr (они будут указывать на старый объект)?   -  person Greg    schedule 05.09.2012


Ответы (1)


Вы имеете в виду что-то вроде этого?

void allocateBlocks( boost::shared_ptr<int>& out, int& count )
{
  out.reset(new int[...]);
  count = 10;
}

PS: я предлагаю взглянуть на boost::shared_array‹> & friends для динамического распределения массивов.

PS: подойдет ли std::vector‹>?

person duselbaer    schedule 05.09.2012
comment
могу я спросить, почему вы используете malloc, а не новое? Наше приложение представляет собой смесь кода C и CPP. - person om sarathe; 06.09.2012
comment
-1 Передача malloc памяти в конструкцию, которая освободит ее с помощью оператора delete. - person Paul Manta; 14.09.2012