2013-07-26 1 views
0

다음은 실수를하기 전에 꼭 확인하고 싶은 매우 기본적인 C++ 질문입니다.함수 값에 의한 전달과 자유 할당

I는 이하와 같은 구조체가 obj :

struct obj 
{ 
    BSTR str; 
} 

및 기능 foo에서 I는 cComObject<obj> ex 초기화 및 STR에 메모리를 할당.
그런 다음 함수 foo에서 함수 bar(ex) (변수 ex)을 호출했습니다.

이 경우 힙 누출을 방지하려면 barex.str을 해제해야합니까?

감사

+0

** ['_bstr_t'] (http://msdn.microsoft.com/en-us/library/5yb2sfxk(v=80) .aspx) **을 사용하지 않는 이유는 무엇입니까? 무료로 메모리 관리 기능을 사용할 수 있습니다. 전환뿐만 아니라 '_variant_t'도 참조하십시오. – sehe

+0

가상의'foo' 및'bar' 메소드와 같은 좀 더 많은 코드를 보여 주시면 도와 드리겠습니다. – Jashaszun

+0

@sehe ahh 나는이 특별한 상황을 요구하고있었습니다. 힙 메모리가있는 객체를 값으로 전달하면 피 호출자에서도 힙 메모리를 해제해야합니다. –

답변

1

음, 사람는 메모리 누수를 방지하기 위해 그 BSTR을 확보해야합니다. bar 일 수 있으며, bar이 반환 된 후 foo 일 수 있습니다. BSTR은 포인터 일 뿐이며 wchar_t*의 typedef입니다.

일반적으로 CComObject의 인스턴스는 값을 기준으로 전달하지 않습니다. CComObject은 힙에 할당되고 수명은 참조 카운트를 사용하여 AddRefRelease을 통해 관리됩니다. 또한, CComObject<C>CCComObjectRoot으로부터 유도 될 것으로 예상한다. obj 클래스는 그렇게 파생되지 않았습니다.

+0

BSTR은 기술적으로 단순한 wchar_t * 포인터가 아니므로 대개 'SysAllocString' 및'SysFreeString'을 사용하여 할당/해제해야합니다. –

관련 문제