내 클래스의 데이터 구조에 대한 액세스를 보호해야합니다. 내가 뮤텍스를 가질 수 없기 때문에 (복사 할 수 없기 때문에) 나는 shared_ptr을 가지고 거기에 뮤텍스를 유지하려고합니다. 여기 내 생각의 샘플 코드 :boost :: shared_ptr boost :: mutex 및 복사 생성자
class Sample {
typedef boost::lock_guard<boost::mutex> AcquireLock;
boost::shared_ptr<boost::mutex> mutt;
public:
Sample() : mutt(new boost::mutex) {}
void Method()
{
AcquireLock lock(*mutt);
//do some work here
}
};
내가했습니다 다음과 같은 질문 있어요 :
- 는 클래스의 구성원으로 뮤텍스 방법 (사용하는 나쁜 관행인가, shared_ptr을 통해)?
- shared_ptr을 통해 힙에 메모리가 할당되어 있으므로이 클래스의 복사 생성자를 사용해야합니까?
EDIT : 아마도 좀 더 자세한 내용을 제공해야합니다. 이 개체를 한 번만 만들고 std :: vector로 저장합니다. 나는 복사본을 만들 필요가 없으며 벡터가 복사본을 만들어야 할 필요가있을 때 각 복사본마다 다른 뮤텍스를 갖고 싶지 않습니다. 그것이 복사 생성자가 나를 위해 효과가 있다고 생각하는 이유입니다.
개체를 std :: vector에 저장하고 거기에서 사용하기 때문에 사본을 만들 예정입니다. 그 외에 나는 어떤 사본도 만들지 않을 것이므로 나는 기본 복사 생성자가 나를 위해 일할 것이라고 생각한다. 내가 궁금해하는 것은 얕은 복사본이 참조 카운팅이나 비슷한 것을 엉망으로 만들어 미래에 문제를 일으키는 지 여부이다. –
vector에 shared_ptr을 Sample 객체에 저장하지 않으려면 복사 할 Sample 객체에 대해 걱정할 필요가 없습니다. –