2012-09-28 2 views
1

나는 힙에 객체를 만들고 그것이 잘 돌아 갔는지 여부를 나타내는 부울을 반환하는 메소드를 가지고있다. (1)에서 내 bool 할당에 대해 100 % 확실하지 않습니다. 이게 합법적인가?Bool 할당 연산자

bool ret = true; 

    if (ret = !mRenderBackend)  // make sure mRenderBackend is NULL 
    { 
     if (mEngineSettings.GetRenderBackend() == OPENGL) 
      ret = mRenderBackend = mMemoryAllocator.AllocateObject<RenderOpenGL>(); // (1). AllocateObject returns either NULL or object address 
     } 

    return ret; 

감사

+0

이 방법을 사용해도 논리가 흐려집니다. NULL (또는 최신 C++에서는 nullptr)을 테스트하십시오. – crashmstr

+0

일부 컴파일러에서 경고를 원하지 않으면'if ((ret =! mRenderBackend)) '를 사용하십시오. – Dani

답변

2
당신은 정말 모두에서 부울 필요하지 않습니다

, 그것은 종류의 따라하기 어렵게 만든다. 나는 개인적으로 다음과 같은 것을 할 것이다 :

if (mRenderBackend == NULL)  // make sure mRenderBackend is NULL 
{ 
    if (mEngineSettings.GetRenderBackend() == OPENGL) 
     mRenderBackend = mMemoryAllocator.AllocateObject<RenderOpenGL>(); // (1). AllocateObject returns either NULL or object address 
    } 

return (mRenderBackend != NULL); 
+0

동의 해 주셔서 감사합니다. – KaiserJohaan

0

그렇다.

if (ret = !mRenderBackend) 

ret = !mRenderBackend; 
if(ret) 

에 해당하는

ret = (mRenderBackend == 0); 
if(ret) 

그냥 ret 만 코드에서 안전 보이는 제로/nonzeroness까지 정의되므로주의에 해당합니다.