返回NULL值

|| framebufferd3d11.h的片段
namespace dx11 {
...
class FramebufferManager : public FramebufferManagerBase
{
public:
   ...
private:
   ...
   static struct Efb
   {
      ...
      std::unique_ptr<D3DTexture2D> resolved_color_tex;
      std::unique_ptr<D3DTexture2D> resolved_depth_tex;
   } m_efb;
};
} //namespace
framebufferd3d11.cpp的片段
namespace DX11
{
...
FramebufferManager::Efb FramebufferManager::m_efb;
...
FramebufferManager::FramebufferManager()
{
   ...
   m_efb.resolved_color_tex = NULL;
   m_efb.resolved_depth_tex = NULL;
}
} //namespace
如果使用icc进行编译,则会出现NULL赋值的问题,因为NULL定义为0。如何解决这样的问题?     
已邀请:
您的代码是正确的。以下所有内容均应起作用:
m_efb.resolved_color_tex = 0;
m_efb.resolved_color_tex = NULL;
m_efb.resolved_color_tex = nullptr;
空指针常量(例如
0
NULL
)可以隐式转换为
nullptr_t
,而
unique_ptr
的赋值运算符为
nullptr_t
。如果您使用的ICC版本尚不支持
nullptr
,则可以解释为什么
NULL
的分配对您不起作用。 使用
reset()
可能会带来更好的运气:
m_efb.resolved_color_tex.reset(NULL);
或者,因为since4ѭ是默认参数:
m_efb.resolved_color_tex.reset(); 
    
切勿在构造函数的主体中初始化成员。如果它们具有非平凡的构造函数,则将首先调用它,然后使用
operator=
重新初始化它们。而是使用基本和成员初始化程序列表。喜欢:
FramebufferManager::FramebufferManager() :
   resolved_color_tex(NULL), resolved_depth_tex(NULL)
{
   ...
}
在您的情况下,事实证明: 默认的构造函数(如果您提到
resolved_color_tex()
或根本不提及它,就调用它)已经可以满足您的要求。 对于原始类型,如果您明确提及它们,它们将被零初始化。因此,无论哪种类型的指针成员,如果在初始化列表中明确提及,则将为NULL,而您不必再考虑它了。     

要回复问题请先登录注册