Класс RandomGenerator
предназначен для предоставления одного экземпляра generator
для использования различными объектами. Текущая реализация предоставляет метод getInstance
для получения одного экземпляра класса и метод getGenerator
, который также должен предоставлять единственный экземпляр generator
. Проблема с этой реализацией состоит в том, что предоставленная последовательность чисел всегда одинакова на разных ПК.
RandomGenerator.cpp
#include "RandomGenerator.h"
RandomGenerator::RandomGenerator() : generator(std::random_device()()) {}
RandomGenerator *RandomGenerator::getInstance() {
std::call_once(inited, [&]{
instance = new RandomGenerator();
});
return instance;
}
std::mt19937& RandomGenerator::getGenerator() {
return generator;
}
RandomGenerator.h
#include <mutex>
#include <random>
class RandomGenerator {
private:
inline static RandomGenerator* instance;
inline static std::once_flag inited;
std::mt19937 generator;
RandomGenerator();
public:
static RandomGenerator* getInstance();
std::mt19937& getGenerator();
};