Singleton() z unique_ptr

0

Witam

Chciałbym zrobić Singleton z wykorzystaniem unique_ptr, lecz ciągle sypie błędami których nie zbyt rozumiem nawet z pomocą google'a.

#include <memory>
#include <memory>
using namespace std;

class MyClass
{
public:
    static unique_ptr<MyClass> Instance()
    {
        if (sInstance == nullptr) sInstance(new MyClass);
        return sInstance;
    }

private:
    MyClass(){}
    static unique_ptr<MyClass> sInstance;
};

int main()
{
    shared_ptr<MyClass> ptr;

    return 0;
} 

Błedy:

IntelliSense: function "std::default_delete<_Ty>::operator() [with _Ty=MyClass]" (declared at line 1196 of "D:\Programy\Microsoft Visula Studio 2013 Express\VC\include\memory") is inaccessible

IntelliSense: function "std::unique_ptr<_Ty, _Dx>::unique_ptr(const std::unique_ptr<_Ty, _Dx>::_Myt &) [with _Ty=MyClass, _Dx=std::default_delete<MyClass>]" (declared at line 1486 of "D:\Programy\Microsoft Visula Studio 2013 Express\VC\include\memory") cannot be referenced -- it is a deleted function
0

nie wolno kopiować unikalnych wskaźników.

http://4programmers.net/C/Artykuły/Generyczny_singleton_w_C++

0

Czyli muszę to robić na zwykłym wskaźniku?

Widziałem jakieś implementacje z własnym deleter'e ale takie udziwnienia mnie raczej nie interesują.

0

To ty niepotrzebnie udziwniasz. DCLP jest przecież rozwiązane od C++11 i teraz napisanie własnego singletona w C++ to machnięcie pytą[1]:


class Singleton
{
public:
Singleton& getInstance() {
    static Singleton instance;
    return instance;
}
};

[1]No chyba, że ma być generycznie wtedy to już czary-mary spod linku od spartanPAGE:)

0
  1. jak masz singleton to żadne inteligentne wskaźniki nie są ci potrzebne, bo czas życia singletona zwykle odpowiada czasowi, życia aplikacji
  2. znając życie, singleton nie jest ci potrzebny (kod który nadużywa singletonów, to zawsze proszenie się o kłopoty).

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0