mercredi 21 mars 2018

Singleton object using unique_ptr

I have the below CPP source code for creating a Singleton Object of a class using unique_ptr:

#include <iostream>
#include <memory>

class A
{

public:
    std::unique_ptr<A> getInstance(int log);
    ~A();

private:
    static bool instanceFlag;
    static std::unique_ptr<A> single;
    A(int log);
    int mLog;
};

bool A::instanceFlag = false;
std::unique_ptr<A> A::single = NULL;

std::unique_ptr<A> A::getInstance(int log)
{
    if(!instanceFlag)
    {
        //single = std::make_unique<A>(log);
        single = std::unique_ptr<A>(new A(log));
        instanceFlag = true;
        return std::move(single);
    }
    else
    {
        return std::move(single);
    }
}

A::A(int log) :
    mLog(log)
{

    std::cout << "Called A cons" << std::flush << std::endl;
}

int main()
{
std::unique_ptr<A> mA = A::getInstance(5);
}

But when I compile the code I get below error:

$ c++ -std=c++11 try2.cpp
try2.cpp: In function 'int main()':
try2.cpp:45:41: error: cannot call member function 'std::unique_ptr<A> A::getInstance(int)' without object
 std::unique_ptr<A> mA = A::getInstance(5);
                                         ^

However I have exactly the same format of code in my project and the error reported is:

39:   required from here

single = std::make_unique<A>(log);

error: A(int log)' is private
 A::A(int log) :
  ^

Aucun commentaire:

Enregistrer un commentaire