컴파일러 경고(수준 1) C4683
'function': 이벤트 원본에는 'out'-parameter가 있습니다. 여러 이벤트 처리기를 연결할 때 주의해야 합니다.
설명
둘 이상의 이벤트 싱크가 COM 이벤트 원본을 수신 대기하는 경우 out 매개 변수의 값이 무시될 수 있습니다.
메모리 누수는 다음과 같은 경우에 발생합니다.
메서드에 내부적으로 할당된 out 매개 변수가 있는 경우(예: BSTR *)
이벤트에 둘 이상의 처리기가 있는 경우(멀티캐스트 이벤트임)
누수의 이유는 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
};