2012-03-25 2 views
1

내 C++ 프로젝트에서 자동 메모리 처리를하고 싶습니다.자동 C++ 메모리/객체 인스턴스 관리? 스마트 포인터?

이 자동 메모리 처리를 얻으려면 몇 가지 추가 규칙이 필요합니다. 구체적으로 말해서 새 개체 인스턴스를 만드는 데 특별한 코딩이 필요하지 않습니다. (물론 더 많은 것은 아닙니다. 목적을 이길 때).

stackoverflow에서 많은 유용한 토론에 대한 일부 읽기 후, "스마트 포인터"는 타사 C++ 가비지 수집기에 대한 참조와 함께 가장 많이 사용된다는 사실을 알게되었습니다.

일부 "교과서"C++ 지식 만 있으면 C++ GC의 복잡성으로 인해 사용할 수 없다고 생각합니다.

반면에 .NET/Java 배경을 가지고 있으며 C++에서도이 경험을 활용하고 싶습니다. 나는 객체 인스턴스를 생성하고 다른 클래스/함수에 전달하는 것에 익숙하다. (나는 이것이 C++에서도 빵과 버터 재료라고 생각한다.)

그래서, 내가 찾고있는 스마트 포인터/shared_ptr/boost가 무엇입니까?

(나는 MyClass* var = new MyClass()을하는 것을 의미하지 malloc() 획득 메모리 점에 유의.)

일부 특정 배경 :

은 사실 제가 정확히 어떻게하려고하는 것은 어떤 수있는 몇 가지 라이브러리 함수를 작성하는 것입니다 C++ 프로젝트와 iPhone 프로젝트에서 모두 사용할 수 있습니다 (이러한 클래스는 순전히 논리적 인 비즈니스 클래스이므로 이식성 문제가 없어야 함). 높은 성능 (iPhone이 아닌 게임 앱)이 필요한 영역이 아니라고 생각하지만 리소스 사용에 대한 우려가 있습니다.

이 상황에서 스마트 포인터를 사용하는 데 문제가 있습니까? 더 좋은 대안이 있습니까?

답변

0

참조 카운트를 고려합니까? 참조되는 횟수를 유지하는 기본 클래스를 만들고 참조 횟수가 0 일 때 자체를 삭제합니다.

인스턴스를 필요로하는 참조 객체는 retain() 함수라고하며, 완료되면 release()를 호출합니다. 릴리스를 호출하는 마지막 객체가 인스턴스를 삭제하게됩니다. 당신은이 유지 해제 균형을 조심해야하지만 GC 구현을 제외하고 GC 작업은 당신에서이 참조 카운트를 숨길 방법이 기술은 본질적으로. 자동 GC는 모든 분노가되었고 정말 정확히 언제, 어디서 메모리의 각 바이트가 할당 해제되었다 알고 훨씬 더 안전한 느낌, 개념을 따뜻하게 적이 전에

나는 ++ C를 배웠습니다. 하지만 그건 나 뿐이야.

+0

는 정확히 어떻게 shared_ptr의 작품 아닌가? 이 방법으로 성능 이점을 많이 얻었습니까? – kossmoboleat