Problemas con la siembra de un generador de números pseudoaleatorio más de una vez?

He visto bastantes recomendaciones para no sembrar generadores de números pseudoaleatorios más de una vez por ejecución, pero nunca acompañado de una explicación exhaustiva. Por supuesto, es fácil ver por qué el siguiente ejemplo (C / C ++) no es una buena idea:

int get_rand() {
  srand(time(NULL));
  return rand();
}

desde que llamaget_rand varias veces por segundo produce resultados repetidos.

Pero ¿no sería el siguiente ejemplo una solución aceptable?

MyRand.h

#ifndef MY_RAND_H
#define MY_RAND_H

class MyRand
{
  public:
    MyRand();
    int get_rand() const;
  private:
    static unsigned int seed_base;
};

#endif

MyRand.cpp

#include <ctime>
#include <cstdlib>
#include "MyRand.h"

unsigned int MyRand::seed_base = static_cast<unsigned int>(time(NULL));

MyRand::MyRand()
{
  srand(seed_base++);
}

int MyRand::get_rand() const
{
  return rand();
}

main.cpp

#include <iostream>
#include "MyRand.h"

int main(int argc, char *argv[]) 
{
  for (int i = 0; i < 100; i++) 
  {
    MyRand r;
    std::cout << r.get_rand() << " ";
  }
}

es decir. aunqueMyRandl constructor @: s se llama varias veces en rápida sucesión, cada llamada asrand tiene un parámetro diferente. Obviamente, esto no es seguro para subprocesos, pero tampoco lo esrand.

Respuestas a la pregunta(8)

Su respuesta a la pregunta