Q:

Pointers practice improvement

Hello! I wanted to learn more about pointers, so i wrote the following:
 struct Data {
     int day, month, year;
     double hour;
 }; 

class Movie {
    protected:
        string name;
        Data data;
        int requiredAge;
        int freeSeats;

    public:
        Movie(){  }
        Movie(string moviename, Data dat, int age, int seats) {
            name = moviename;
            data = dat;
            requiredAge = age;
            freeSeats = seats;
        }
        int getFreeSeats() { return freeSeats; } 
        ~Movie(){  }

};

And then i initialize it into the main:
int _tmain(int argc, _TCHAR* argv[])
{
    Data d; d.day = 12; d.hour = 16; d.month = 04; d.year = 2016;
    Movie movie("Movie Name", d, 16, 35 );

    system("pause");

    return 1;
}

Why should i use pointers here and where? 

A:

The only place where it could make sense to use pointers here is for passing the struct to the constructor:
    Movie(string moviename, Data* dat, int age, int seats) {
        name = moviename;
        data = *dat;
        requiredAge = age;
        freeSeats = seats;
    }

This would avoid creating a complete copy of the struct when the constructor is called. Just passing the pointer is a bit cheaper.
While in C, this would be the only option, in C++ there is a better way: Use references:
    Movie( const string& moviename, const Data& dat, int age, int seats) {
        name = moviename;
        data = dat;
        requiredAge = age;
        freeSeats = seats;
    }

By the way, for the intarguments it is not useful to pass them by reference bacause they are not larger (in terms of bytes) than a pointer.
An even better version would use an initialization list:
    Movie( const string& moviename, const Data& dat, int age, int seats)
        : name(moviename), data(dat), requiredAge(age), freeSeats(seats) {}

(Thanks for the hint, @NathanOliver)

