C++/CLI 컴파일러의 == 연산자 버그?

property CInventoryBagManaged^ BagInventory
{
	CInventoryBagManaged^ get()
	{
		if(m_BagInventory == nullptr)
		{
			CInventoryBag* inventory =  m_NativeObject->GetBagInventory();
			if(inventory == NULL)
				return nullptr;

			m_BagInventory = gcnew CInventoryBagManaged(inventory);
		}
		return m_BagInventory;
	}
}

해당 클래스의 전체 소스코드를 공개할 수야 없는 노릇이니 문제가 된 프로퍼티만 적었다. 해당 클래스엔 이와 유사한 프로퍼티가 여러 개 있는데 유독 이 프로퍼티에서만 문제가 발생했다. 뭔 문제인가 하니, if(m_BagInventory == nullptr)에서 널 참조 예외가 계속 튀어나왔다. 어라? m_BagInventory가 널인지 확인하라니까 널 참조를 내보내? 미친 건가?

디버거 창에서 m_BagInventory==nullptr이냐고 물으니까 true란다. 도대체 어쩌라고?

결국 컴파일러 버그인가 싶어 코드를 if(nullptr == m_BagInventory)라고 고쳐봤다. 그러니까 더 이상 널 참조 예외가 안 난다. 참 난감한 일이다. 이런 구조를 가진 프로퍼티가 여러 개 있는데 유독 이번만 문제가 발생했다. 일단 문제의 재발 방지 차원에서 앞으론 if(nullptr == m_BagInventory) 식으로 코드를 짜야겠다.

Advertisements

최 재훈

블로그, 페이스북, 트위터 고성능 서버 엔진, 데이터베이스, 지속적인 통합 등 다양한 주제에 관심이 많다.
Close Menu