OOP Constructors as Parameters

yes this is true. Lame excuse is that It was beyond the scope of this simple example typed here (ie I've been lazy as typing in the browser).

What would be the suggestion if the number of legs or joints was dynamic ?

Rule R11 can be discussed as the instance does belong to a resource that can call delete.

side not regarding your code:

Isn't that going to invoke a copy & delete that is not necessary

which should be visible if you add an explicit copy constructor to the Joint class

    Joint(const Joint &j) {Serial.print("Duplicating Joint "); Serial.println(number = j.number);}

I would suggest to do

Leg(int j1, int j2, int j3) 
  : joint1(j1), joint2(j2), joint3(j3) {

instead