Technically, about the best way to do what you want to do is using malloc() with placement-new.
Code:
Class1 *classes = static_cast<Class1 *>(malloc(sizeof(Class1) * 2));
new(&classes[0]) Class1("Hello");
new(&classes[1]) Class1("Goodbye");
(By the way, in doing this, you're basically duplicating the functionality of new[]. The only difference being that you're avoiding the effort of default initializing the instances when you're going to be initializing them with a different constructor directly afterwards.)
This is, technically, the best way to do it as it avoids any unnecessary temporaries or initialization that the other examples had (of course, this is assuming the optimizer doesn't just get rid of them completely, which it may very well do). Of course, all of the other ways are easier to understand, thus they have their own merits (Except for noobie's of course, which leaks memory, if it were even valid to assign a Class1 * to a Class1 at all

).
However, as it is, none of the examples, which have been using milt's original Class1 definition, have been correct, other than mine and arul's. This is because when milt defined a constructor for Class1 that took a std::string parameter, he hid the default constructor for Class1, thus using new to create multiple Class1 objects is illegal as it requires Class1 to have a default constructor to call on each of the objects. Using malloc() (or calloc() for that matter) elides this restriction, as it doesn't call any constructors, it only allocates memory (including calloc(), though it does zero memory out for you).
Also, in arul's method, classes is a pointer variable, it just doesn't look like it. In C/C++, all arrays decay to pointer's, thus classes is usable in (almost) any place where a pointer would be allowed.
edit: Darn, Nochte beat me to my last statement.