Coding Global Background
Coding Global

Need a little help with my Singleton class

Archiviert a year ago
1 Nachrichten
0 Mitglieder
Erstellt a year ago
Aktualisiert a year ago
In Discord öffnen
A
Yuuki
Verified
Hi! :Gura_Wave: Could someone help out with my singleton class? It seems correct to me but it keeps creating new instances.

class FrameService {

protected:

    FrameService() = default;

    ~FrameService() {
        for (auto& frame : frames) {
            cairo_surface_destroy(frame.second);
        }
    }

    static FrameService* instance_;
    static std::mutex mutex_;

public:

    FrameService(FrameService& other) = delete;
    void operator=(const FrameService&) = delete;

    static FrameService* getInstance();

    void preloadFrames(pqxx::connection* conn) {
        // these will set the frames map
        loadLocalFrames();
        loadDatabaseFrames(conn);
    }

private:
    std::unordered_map<std::string, cairo_surface_t*> frames;
};

FrameService* FrameService::instance_ = nullptr;
std::mutex FrameService::mutex_;

FrameService* FrameService::getInstance() {

    std::lock_guard<std::mutex> lock(mutex_);

    spdlog::info("Getting FrameService instance");

    if (instance_ == nullptr) {
        spdlog::info("Creating FrameService instance");
        instance_ = new FrameService();
    }

    spdlog::info("Returning FrameService instance");
    return instance_;
}


Then in different files across the project I'm using FrameService* frameService = FrameService::getInstance();


And I keep getting:
[2024-10-20 23:43:43.449] [info] Getting FrameService instance
[2024-10-20 23:43:43.449] [info] Creating FrameService instance
[2024-10-20 23:43:43.449] [info] Returning FrameService instance
[2024-10-20 23:43:43.458] [info] Getting FrameService instance
[2024-10-20 23:43:43.458] [info] Creating FrameService instance
[2024-10-20 23:43:43.458] [info] Returning FrameService instance

Antworten (1)