다음을 통해 공유


컴파일러 경고(수준 1) C4683

'function': 이벤트 원본에는 'out'-parameter가 있습니다. 여러 이벤트 처리기를 연결할 때 주의해야 합니다.

설명

둘 이상의 이벤트 싱크가 COM 이벤트 원본을 수신 대기하는 경우 out 매개 변수의 값이 무시될 수 있습니다.

메모리 누수는 다음과 같은 경우에 발생합니다.

  1. 메서드에 내부적으로 할당된 out 매개 변수가 있는 경우(예: BSTR *)

  2. 이벤트에 둘 이상의 처리기가 있는 경우(멀티캐스트 이벤트임)

누수의 이유는 out 매개 변수가 둘 이상의 처리기에 의해 설정되지만 마지막 처리기에서만 호출 사이트로 반환되기 때문입니다.

예시

다음 샘플에서는 C4683을 생성하고 이를 해결하는 방법을 보여 줍니다.

// C4683.cpp
// compile with: /W1 /LD
#define _ATL_ATTRIBUTES 1
#include "atlbase.h"
#include "atlcom.h"

[ module(name="xx") ];

[ object ]
__interface I {
   HRESULT f([out] int* pi);
   // try the following line instead
   // HRESULT f(int* pi);
};

[ coclass, event_source(com) ]
struct E {
   __event __interface I;   // C4683
};