2013-10-03 2 views
1

저는 누군가가 명확히 도울 수 있기를 바라고 아주 기초적인 것으로 고심하고 있습니다. 이 의사 예를 들어 C++ 코드를 가지고 :Qt/C++는 클래스 인스턴스에서 변수와 가시성을 공유합니다.

class T { 
    public 
    QMutex M; 
    int I; 
} 
  1. 를 I (3 개 스레드로)이 클래스를 세 번 인스턴스화하는 경우가 3 개 별도의 관련이없는 M과 I 변수는? 또는 3 개의 인스턴스가 모두 동일한 M 및 I 변수를 공유합니까?

  2. 클래스에 여러 개의 재진입 메소드 (예 : 슬롯)가 있고 M 또는 I에 액세스하는 경우 클래스의 해당 한 인스턴스의 M 또는 I에 액세스하고 있습니까?

  3. 어떻게 내가이 수업을 세 번 (3 등 스레드)를 인스턴스화하는 경우, 그것의 클래스의 각 인스턴스를 (다른 인스턴스에 액세스 할 수 없습니다) 자신의 변수

답변

1

을 줄 별도의 (3)가 있습니다 무관 한 M과 I 변수? 또는 3 개의 인스턴스가 모두 동일한 M 및 I 변수를 공유합니까?

이러한 변수는 힙이 아닌 스택에 할당되기 때문에 별도입니다. 서로 다른 클래스 인스턴스의 동일한 메모리를 가리키는 포인터를 사용하면 힙 객체로 메모리 값을 공유 할 수 있습니다.

클래스에 여러 개의 재진입 메소드 (예 : 슬롯)가 있고 M 또는 I에 액세스하는 경우 클래스의 해당 한 인스턴스의 M 또는 I에 액세스하고 있습니까?

예, 클래스 인스턴스에서 슬롯을 사용하는 경우 명시 적으로 다른 클래스 인스턴스에 액세스하려고하지 않는 한 슬롯 인스턴스에 액세스합니다.

어떻게 당신이 위에 쓴 것처럼 (다른 인스턴스에 액세스 할 수 없습니다) 자신의 변수

있어 클래스의 각 인스턴스를 제공 할 수 있습니다. :-) 비록 당신이 공개 접근성을 썼다는 것에 주목할지라도 결국 어느 인스턴스에서든 인스턴스에 접근 할 수 있습니다. 그러나 이것은 아마도 당신이 참조하려고하는 것이 아닙니다.

+0

Thans Laszlo - 내 질문에 많이 답하고 있습니다! 클래스 Q의 많은 인스턴스에서 QMutex 변수 M을 공유하려면 M을 정적 변수로 만들어야합니다. – TSG

+0

@Michelle : 네. 당신이 나를 너무 미워하지 않고 당신의 질문에 대답 할 수 있기를 바랍니다. 아마도 당신은 때때로 다른 사람의 말을 듣고 싶을 것입니다. :-) – lpapp