 <p>Why not use a <code>vector</code> of <code>Player</code> object pointers?</p> <pre><code>std::vector&lt;Player*&gt; vec; </code></pre> <p>Then, when you want to allocate a new player, do:</p> <pre><code>vec.push_back(new Player); </code></pre> <p>Here, the problem with your code may be that there is a chance of any <code>Player</code> stored in an array getting over written. But, using vector, you can use <code>const iterators</code> and hence, make sure that they are not getting changed when you don't want them to.</p> <p>Also, you don't have to worry about allocating a constant size.</p> <p>Also, if your Player object contains any member pointers, make sure that you don't pass any Player object by value or do assignment using them. If that is the case, you might want to write your own copy constructor and assignment operator so that shallow copy does not occur.</p>