Нет, (в отличие от Java), когда вы объявляете массив, он создает строку в каждом индексе, используя конструктор по умолчанию.
Изменить для ясности:
под "новым" я не имею в виду распределение new
в куче, оно хранится там, где вы его объявили, в разделе данных (для глобальных) или в стеке (локальные).
Из комментария кажется, что вы думаете о чем-то вроде этого:
std::string foo[3];
...
foo = {"a","b","c"}; // DOES NOT WORK
Нет, вы не можете этого сделать. foo
уже имеет выделенное и инициализированное пространство, и вы не можете просто назначить целые массивы таким образом (кроме как в инициализаторе). Если вы объявили это как std::string *foo
, вы могли бы, но я не рекомендую этого в этом случае.