Я предполагаю, что вы имеете в виду что-то вроде этого:
std::vector<MyClass*> v(10);
Да, вектор инициализации с нулевыми указателями. Цитирование стандарта по главе и стихом несколько вовлеченных ...
14 §23.3.6.2 C++ «` вектора конструкторов, копирование и присваивание»:
explicit vector(size_type n, const Allocator& = Allocator());
Эффекты: Формирует a vector
с n
элементами, вставленными по умолчанию, с использованием указанного распределителя.
Требуется:T
должен быть DefaultInsertable
в *this
. «Общие требования контейнер»
§23.2.1 ¶13:
- T
является DefaultInsertable
в X
означает, что следующее выражение хорошо сформированные:
allocator_traits<A>::construct(m, p)
- Элемент X
: по умолчанию, если он инициализирован оценкой o е выражение
allocator_traits<A>::construct(m, p)
, где p
является адресом неинициализированного хранения для элемента, выделенного в пределах X
.
§20.7.8.2 «Распределитель черта функций-членов» ¶5:
template <class T, class... Args>
static void construct(Alloc& a, T* p, Args&&... args);
Эффекты: вызовов a.construct(p, std::forward<Args>(args)...)
если вызов является хорошо сформированным; в противном случае вызывается ::new (static_cast<void*>(p)) T(std::forward<Args>(args)...)
.
§20.7.9.1 «[по умолчанию] allocator
члены» ¶12:
template <class U, class... Args>
void construct(U* p, Args&&... args);
эффекты:::new((void *)p) U(std::forward<Args>(args)...)
Возвращаясь к §23.2.1 ¶13, видим, что args
пуст. Поэтому ...
§8.5 «Инициализаторы»:
Объект, инициализатор пустой набор скобок, то есть, ()
, должно быть значение инициализации.
из той же секции:
Чтобы значение инициализации объект типа T
означает: ... в противном случае, объект равен нулю инициализирован.
из той же секции:
Для нулевой инициализации объект или ссылка типа T
означает: ... если T
тип скаляр (3.9), то объект инициализируется со значением, полученным с помощью преобразование целочисленного литерала 0
(ноль) в T
;
Сноска 106:
Как указано в 4.10, преобразование целого числа буквальные, значение которого 0
до результатов типа указателя в нулевом значении указателя.
awesome thanks :) – r0ng