No, (unlike Java), when you declare the array, it creates a string at each index using the default constructor.
Edit for clarity:
by "new" I don't mean like the new allocation to the heap, it gets stored wherever you declared it, in the data section (for globals) or stack (locals).
From a comment, it seems you're thinking more of something like this:
std::string foo[3];
...
foo = {"a","b","c"}; // DOES NOT WORK
No, you can't do that. foo already has its space allocated and initialized, and you can't just assign whole arrays like that (except in the initializer). If you declared it as std::string *foo you could, but I don't recommend that in this case.