#include <iostream>
#include <memory>

struct Fred
{
  int step;
  int ballChange;
};

std::ostream& operator<< ( std::ostream& stm, const Fred& f )
{ return stm << "Fred{" << f.step << ',' << f.ballChange << '}' ; }

int main()
{
    constexpr int N = 5 ;

    {
        // value initialization
        std::unique_ptr< Fred[] > p( new Fred[N] () ) ;
        for( int i = 0 ; i < N ; ++i ) std::cout << p[i] << ' ' ;
        std::cout << '\n' ;
    }

    {
        // addregate initialization
        std::unique_ptr< Fred[] > p( new Fred[N] { {0,1}, {2,3}, {4,5} } ) ;
        for( int i = 0 ; i < N ; ++i ) std::cout << p[i] << ' ' ;
        std::cout << '\n' ;
    }

    // etc.
}
