What are the (dis)advantages to overloading an member operator vs a free operator? When and where is it best to use one or the other?

// Member functions // In vector class Vector3 operator * const (const Matrix&) {} // in matrix class Vector3 operator * const (const Vector&) {} //vs // free functions Vector operator * (const Matrix&, const Vector&) {} Vector operator * (const Vector& const Matrix&) {}