if I do:
std::unique_ptr<int[]> uparr(new int[1984]);
и я передаю uparr
кому-то, не передавая им 1984
, могут ли они увидеть, сколько в нем элементов?
иначе есть ли эквивалент вектора .size() для unique_ptr массива?
if I do:
std::unique_ptr<int[]> uparr(new int[1984]);
и я передаю uparr
кому-то, не передавая им 1984
, могут ли они увидеть, сколько в нем элементов?
иначе есть ли эквивалент вектора .size() для unique_ptr массива?
Нет, нет. Динамические массивы — несколько дефектная функция языка. По сути, вам всегда нужно/нужно передавать длину массива отдельно (если только у вас нет какой-либо дозорной политики). Таким образом, вы можете также использовать std::vector
(если вы не возражаете против дополнительного слова для емкости).
Нет, информация потеряна.
Если вам нужно отслеживать его, используйте вместо этого вектор или, если вам действительно не нужны дополнительные услуги, напишите небольшую оболочку вокруг выделенного массива. Например, вы можете посмотреть на предложение std::dynarray
, которое было выведено из стандарта c++1y.