편집 : GWW의 대답을 참조하십시오. 문제는 단순히 C :: Instance()로 불법 복사를하는 것이 었습니다. 그리고 내가 틀렸어, 오류가 mutable에 의존하지 않습니다.변경 가능한 멤버가있는 싱글 톤 객체
정적 메서드가 변경 가능한 메서드와 호환되지 않습니까?
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는 this post과 유사하지만 객관적인 C 코드이며 거기에 너무 많은 코드가있어서 질문과 관련이없는 것으로 보입니다.
편집 : QMutex의 복사본은 개인적인 문제라는 것을 분명히 깨달았습니다. 하지만 '변경 가능'이 왜 달라 지어야하는지, 즉 복사를 유도하는 이유를 이해할 수 없습니다.
'C c = C :: Instance();'인스턴스를 복사합니까? 네가 그 일을하고 싶다고 확신하니? – GWW
@GWW 오, 너 괜찮아! * blush * –
그래서 문제는 '변경 가능'이 컴파일러에서 생성 된 복사 생성자의 공개/비공개 특성에 어떤 영향을 줍니까? –