Я бы использовал вектор.Ваша версия указателя не предлагает никаких улучшений по сравнению с вектором, и вы теряете много полезных функций.Скорее всего, вам понадобится измерить размер и выполнить итерацию вашего массива в какой-то момент, с вектором, который вы получите бесплатно, тогда как вам нужно будет реализовать его самостоятельно для вашей версии указателя;в этот момент вы, возможно, также просто использовали вектор для начала.
Там может быть затратами на производительность, создавая вектор, но я сомневаюсь, что для большинства приложений это будет узким местом.,Если вы создаете так много векторов, что создание их экземпляров стоит вашего времени, вы, вероятно, будете более умны в управлении ими (объединение памяти, пользовательских распределителей векторов и т. Д.).Если сомневаетесь, измерьте.
Один из примеров, где вам может понадобиться использовать версию unique_ptr<>
, может быть, если вы работаете с библиотекой, написанной на C, где вы теряете право собственности на массив.Например:
std::unique_ptr<unsigned char[]>myArray(
new unsigned char[3 * outputImageHight * outputImageWidth]);
my_c_lib_data_t cLibData;
int result = my_c_lib_set_image(cLibData, myArray);
if (MYLIB_SUCCESS == result)
// mylib successfully took ownership of the char array, so release the pointer.
myArray.release();
Если у вас есть выбор, предпочитайте использовать контейнеры в стиле C ++, где это возможно.