Я пытаюсь создать общий указатель экземпляра синглтона.Ниже описан способ, которым я пытаюсь это сделать.
Реализация синглтона:
class MessageQueue
{
private:
std::mutex _mutex;
std::queue<std::string> _messageQueue;
MessageQueue() {}
public:
MessageQueue(const MessageQueue& obj) = delete;
MessageQueue& operator=(const MessageQueue& obj) = delete;
static MessageQueue& getInstance()
{
static MessageQueue instance;
return instance;
}
void pushMessage(std::string& message);
std::string popMessage();
void flushOut();
};
Использование экземпляра синглтона для создания общего указателя:
class Producer
{
private:
std::shared_ptr<messagequeue::MessageQueue> _queue;
public:
Producer()
{
if(!_queue)
{
auto& instance = messageq::MessageQueue::getInstance();
_queue = std::make_shared<messageq::MessageQueue>(instance);
}
}
Producer(const Producer& obj);
Producer& operator=(const Producer& obj);
};
Теперьпроблема в том, что код не компилируется, потому что конструктор копирования класса singleton удален.Если я определю конструктор копирования, он будет скомпилирован, но тогда он больше не является одноэлементным классом.
Итак, каков наилучший способ добиться этого?Моя цель состоит в том, чтобы я хотел сделать переменную экземпляра shared_ptr экземпляра класса, а общим ресурсом был бы одноэлементный объект.
Пожалуйста, помогите здесь.