return NULL value
return NULL value
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);
或者,因为NULL
是默认参数:
m_efb.resolved_color_tex.reset();
永远不要在构造函数体中初始化成员。如果它们具有非平凡构造函数,则首先调用它,然后使用operator=
重新初始化它们。而是使用基类和成员初始化列表。如:
FramebufferManager::FramebufferManager() :
resolved_color_tex(NULL), resolved_depth_tex(NULL)
{
...
}
在你的情况下,结果是:
- 默认构造函数(如果你提到
resolved_color_tex()
或根本不提到它就调用它)已经做了你想要的。 - 对于基本类型,如果显式地提到它们,它们将被零初始化。因此,任何指针成员,无论什么类型,如果在初始化列表中明确提到,将是NULL,你不必再考虑它了。
相关文章:
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 如何在 c++ 中'NULL'字符串
- c++使用foreach使数组为null
- 当使用通配符和null指针调用函数时,对输出的说明
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 为什么static_assert错误:即使我传递常量"expression must have a constant value"?
- 如何在映射中返回null
- 为什么返回 NULL 不会破坏函数?
- 构造函数中的 QQuickItem 父项 null
- 为什么我会" void value not ignored as it ought to be"?
- 检查字符串是否"null" C++
- 方法错误"not all control paths return a value"和方法不返回值
- fopen 在 gdb 中返回 NULL
- what(): basic_string::_M_construct null not valid
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- C++/SDL "initial value of reference to a non-const must be an lvalue"
- 在 Json::Value in JsonCpp 中赋值 [null]
- C: strtok value gives back null
- return NULL value