In the book I am reading at the moment (C++ Complete Reference from Herbert Schildt), it says that no array allocated using new can have an initializer.
Can't I initialize a dynamically allocated array using new? If not whats the reason for it? 
In the book I am reading at the moment (C++ Complete Reference from Herbert Schildt), it says that no array allocated using new can have an initializer.
Can't I initialize a dynamically allocated array using new? If not whats the reason for it? 
That's not quite true (you should almost certainly get yourself an alternative reference), you are allowed an empty initializer (()) which will value-initialize the array but yes, you can't initialize array elements individually when using array new. (See ISO/IEC 14882:2003 5.3.4 [expr.new] / 15)
E.g.
int* p = new int[5](); // array initialized to all zero
int* q = new int[5];   // array elements all have indeterminate value
There's no fundamental reason not to allow a more complicated initializer it's just that C++03 didn't have a grammar construct for it. In the next version of C++ you will be able to do something like this.
int* p = new int[5] {0, 1, 2, 3, 4};
 
    
    The book is correct; you cannot have,
int *p = new int[3](100);
There is no understandable reason behind it. That's why we have initializers for array in C++0x.
 
    
    I think the book is correct, in generally you cannot do that with current version of c++. But you can do that with boost::assign to achieve a dynamic array, see below
#include <boost/assign/list_of.hpp>
class Object{
public:
    Object(int i):m_data(i){}
private:
    int m_data;
};
int main()
{
    using namespace boost::assign;
    std::vector<Object> myvec = list_of(Object(1))(Object(2))(Object(3));
}
