c++ - 返回 NULL 值

标签 c++ c++11 smart-pointers icc unique-ptr

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;

空指针常量(如 0NULL)可以隐式转换为 nullptr_t 并且 unique_ptr 有一个采用 nullptr_t 的赋值运算符。如果您使用的 ICC 版本尚不支持 nullptr,这可以解释为什么 NULL 的分配对您不起作用。

使用 reset() 可能会有更好的运气:

m_efb.resolved_color_tex.reset(NULL);

或者,因为 NULL 是默认参数:

m_efb.resolved_color_tex.reset(); 

关于c++ - 返回 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5630875/

相关文章:

c++ - 环或环中哪个共享指针应该是弱指针

c++ - 智能指针+循环+ "->"

c++ - 使用 boost::shared_ptr 进行多态转换

c++更好地初始化 map 的 map

python - 正则表达式速度 : Python x6 times faster than C++11 under VS2013?

c++ - 错误 : 'A' is an inaccessible base of 'B'

c++ - 我可以在没有超时的情况下检查 std::condition_variable 吗?

c++ - 如何对 5 位值进行符号扩展?

c++ - 返回派生类类型的基类中的方法?

c++ - 链接gtest项目时出错