1

我有一个方法,我在堆上创建对象并返回一个布尔值,指示它是否顺利。尽管在 (1) 中,我对我的布尔分配不是 100% 确定的;这是合法的吗?

    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;

谢谢

4

2 回答 2

2

你根本不需要 bool,它有点让人难以理解。我个人会做类似的事情,

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);
于 2012-09-28T19:34:32.260 回答
0

是的,合法的。

if (ret = !mRenderBackend)  

相当于

ret = !mRenderBackend;
if(ret)

相当于

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

请注意,它ret只会被定义为在您的代码中看起来安全的零/非零。

于 2012-09-28T19:35:53.833 回答