Айналмалы мүшелері бар Singleton нысандары

EDIT: GWW-ның жауабын қараңыз, мәселе C :: Instance() көмегімен заңсыз көшірмені жасайды. Және мен қателеспесем, қате өзгеріссіз байланысты.

Статикалық әдістер өзгермейтін әдістермен үйлеспейді ме? Міне, менің кодымның жеңілдетілген нұсқасы:

c.h:

class C 
{
    public:
        static C& Instance();
    private:
        C();

        mutable QMutex _mutex; 
};

c.cpp:

C& C::Instance() 
{
    static C instance;
    return instance; 
} 
C c = C::Instance();

Сонда мен алған қате (gcc 4.2)

error: 'QMutex::QMutex(const QMutex&)' is private within this context

synthesized method 'C::C(const C&)' first required here //at C::Instance()

Егер «өшірілген» кілт сөзін алып тастасам, бұл қате жойылады, бірақ кейін әрине _mutex const/құлпын ашу әдістерін жасай алмаймын. Мен өзімнің көшірмімді жазуды ешкім өзгертпейді. Мұны қалай шешуге болады? NB бұл бұл хабарламаға ұқсас

  • онда мәселеге қатысты көрінбейтін өте көп код бар.

    EDIT: Мәселе, QMutex-тің көшірмесі ctor жеке болып табылатыны түсінікті. Бірақ мен түсінбеймін, неге «ауысым» мұнда өзгеруі керек, яғни неліктен ол көшірмесін жасайды.

  • 0
    Мәселен мәселе төмендегідей қайнайды: mutable компилятор жасаған көшірме конструкторының қоғамдық/жеке сипатына қалай әсер етеді?
    қосылды автор Mark Ransom, көзі
    @GWW Oh LOL сіз дұрыс! blush
    қосылды автор Matt Phillips, көзі
    @Mark Ok Мен екі рет тексердім, және дәл сол қатені аламын, бірінші рет көрген емеспін. Бұл сұрақты жою.
    қосылды автор Matt Phillips, көзі
    C c = C :: Instance (); дананы көшіреді? Не істегіңіз келетініне сенімдісіз бе?
    қосылды автор GWW, көзі

    1 жауаптар

    Сіз өзіңіздің синглоныңызды көшіруге тырысып жатырсыз және оның көшірмесі конструкторды жекеше деп жариялағандықтан істемейді. Бұл өзгермейтін мүшелермен мүлдем ештеңе жоқ.

    3
    қосылды
    C & c = C :: Instance (); , мүмкін, бұл түзету
    қосылды автор GWW, көзі