2013-07-15 1 views
0

전문가들,Smart Pointer를 사용하는 C++의 "Observer-Pattern"?

내가 실제로이 게시판에 질문을 올리면서 과거에 많은 도움을받은 것은 이번이 처음입니다. 나는 아직도 프로그래밍 초보자이며 지난 몇 개월 동안 & 소프트웨어 개발을 프로그래밍하는 것에 대해 많은 것을 배우려고 노력해 왔습니다.

최근에 "C++ 11-Smart Pointers"라는 주제를 다루었으며 리소스 관리를 위해 shared_ptr & weak_ptr을 사용하는 "Observer Pattern"을 포함하여 몇 주 전에 배운 모든 디자인 패턴을 다시 작성하기로 결정했습니다.

관찰자 패턴의 간단한 구현 (헤드 퍼스트의 디자인 패턴 또는 디자인 패턴 : E.Gamma)을 작성할 때, 관찰 대상과 관찰자 모두에 대해 인터페이스 클래스를 사용하고 정확히 하나 각각 구체적인 클래스를 사용하여 Visual Studio에서 다양한 오류 메시지를 받았습니다. 이 패턴에서 shared_ptr과 weak_ptr을 결합하는 방법을 이해하지 못했습니다. 이는 둘 다의 조합을 완전히 이해하지 못하기 때문일 수 있습니다.

유감스럽게도 인터넷을 철저히 검색해도 나를위한 방향으로 작용할 수있는 "스마트 포인터를 사용하는 관찰자 패턴"의 간단한 예제가 제공되지 않았습니다.

나는 너희들 중 누군가가 그런 간단한 임 플레멘 테이션을 어디에서 발견 할 수 있는지, 아니면 나 자신에게 하나를 제공하기 위해 너무 친절한 지 궁금해하고 있었다. 모두

덕분에 많은

coderAndi

+2

우리가 패턴과 오류를 구현하려는 시도를 보여 주면 아마도 approcah를 도울 수 있습니다. 간단히 말해서, 지금까지 시도한 것은 무엇입니까? –

+2

@ArneMertz 그는 문제를 정의하기 전에 솔루션 (스마트 포인터)을 선택하여 역으로 진행할 것입니다. 실제로 관찰자 패턴은 스마트 포인터가 적절하지 않을 때 사용되도록 설계된 무언가의 대표적인 예입니다. –

+0

Observer-> Observable 연결을 리소스로 볼 수 있으며 스마트 포인터를 사용하여 해당 리소스를 관리 할 수 ​​있습니다. 하지만 그가 의도 한 바가 아님을 생각합니다 .- –

답변

3

관찰자 패턴이 스마트 포인터 (적어도 보통의 후보가) 부적절한 경우의 전형적인 예입니다 :-) 정말 정말 도움이 될 것입니다. 개체와 개체가 서로 "소유"하지 않습니다. 각각은 자체 수명을 가지고 있습니다. 사실, 관찰자 ​​ 패턴을 자주 사용하는 것은 오브젝트가 자신이 소유하지 않은 다른 오브젝트에 대한 포인터를 가지고있을 때입니다. 관찰 된 개체가 파괴 될 때 이되도록 관찰자로 등록합니다.

당신이 전체를 공격하고있는 것처럼 들리네. 거꾸로. 솔루션 (스마트 포인터)을 가지고 있고, 모든 문제를 해결하기 위해 노력하고있는 것은 입니다. 그것은 결코 작동하지 않습니다.

+0

즉각적인 답장을 보내 주셔서 감사합니다 :-) 일치하는 예제를 찾을 수없는 이유는 이미 observer 패턴에 shared_ptr 및 weak_ptr을 사용하지 않았기 때문입니다. 내가 실제로 읽었던 책들이 내가 몇 가지 규칙을 따르는 한 괜찮을 것 같은 인상을 주었기 때문에 나는 실제 포인터를 사용하여 실제로 포인터를 사용했다. – CoderAndi

+1

@CoderAndi 그것은 아니. 스마트 포인터는 유용한 도구이지만 보편적으로 적용 할 수있는 것은 아닙니다. 그들은 특정 경우에 특정 문제를 해결하지만, 대부분의 응용 프로그램에서 대부분의 포인터는 순전히 탐색을위한 것이므로 원시 포인터 여야합니다. –

+0

패턴을 구현하려는 @CoderAndi는 매우 유용한 연습은 아닙니다. 패턴을 사용하여 단순화 할 수있는 실제 코드에서 문제가 발생했을 때만 패턴을 배울 수 있습니다. 관찰자 패턴의 실제 예제는'boost :: signal'을 참고하십시오. 그러면 거기에 shared_ptr이 없습니다. – yngccc