Singleton() z unique_ptr

Odpowiedz Nowy wątek
2015-05-23 15:38
Krwawy Pomidor
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

Pozostało 580 znaków

2015-05-23 16:28
0

nie wolno kopiować unikalnych wskaźników.

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

Pozostało 580 znaków

2015-05-23 17:29
Krwawy Pomidor
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ą.

Pozostało 580 znaków

2015-05-23 22:12
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:)


Pozostało 580 znaków

2015-05-23 22:39
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).

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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