Зачем использовать одно против другого: `boost :: shared_array` VS` boost :: shared_ptr <std :: vector> `? - PullRequest
4 голосов
/ 23 июля 2011

Так что для работы с большими блоками памяти для изображения или тому подобного есть явно много вариантов.

Поскольку я фанат умных указателей и RAII, мне интересно, умнее ли этоперейти с:

  • a shared_ptr к std::vector

или

  • , чтобы перейти с shared_array, указывающим надинамически распределяемый массив.

Каковы концептуальные, практические и эксплуатационные последствия выбора одного против другого?

Ответы [ 2 ]

3 голосов
/ 23 июля 2011

Это то же самое, что сравнивать массив std :: vector и C.

Думайте о shared_array как о массиве RAII C. То, что вы получаете, это просто автоматическое освобождение памяти. Полезно в случаях, когда вы имеете дело со сторонним кодом, который возвращает массивы. Теоретически это быстрее, чем std :: vector в некоторых крайних случаях, но гораздо менее гибко и менее безопасно.

std :: vector, вероятно, лучший выбор.

2 голосов
/ 23 июля 2011

shared_ptr до std::vector

  • + допускает амортизированное постоянное время push_back
  • - вводит дополнительный уровень косвенности по сравнению с std::vector

shared_array

  • + не вводит дополнительный уровень косвенности
  • - не допускает добавление амортизированного постоянного времени, если вы сами не реализуете его, что снова потребует дополнительного уровня косвенности.
...