gpt4 book ai didi

c++ - 指向非指针编译错误的唯一指针

转载 作者:搜寻专家 更新时间:2023-10-31 01:29:17 25 4
gpt4 key购买 nike

我尝试实现非指针的唯一指针,如下所述: One-liner for RAII on non pointer?https://dzone.com/articles/c11-smart-pointers-are-not .但我总是收到编译器错误:/usr/include/c++/5/bits/unique_ptr.h:235:12: error: invalid operands of types 'unsigned int' and 'std::nullptr_t' to binary 'operator!= '

这是我的代码:

struct ShaderDeleter
{
typedef GLuint pointer; // Note the added typedef
void operator()(GLuint shader) {
glDeleteShader(shader);
}
};

int main() {
std::unique_ptr<GLuint, ShaderDeleter> smart_shader{glCreateShader(GL_VERTEX_SHADER)};
}

我做错了什么?

平台:Ubuntu 16.04

编译器:g++

最佳答案

根据 C++17 [unique.ptr.single]/3:

[...] The type unique_ptr<T, D>::pointer shall satisfy the requirements of NullablePointer.

这些要求可在 [nullablepointer.semantics] 中找到,即 summarised here .简而言之,该类型必须允许与 nullptr 进行比较.所以整数不能用作类型。

您的非 SO 链接中的代码格式错误。 SO link 中“fjoanis”的答案中的代码也是病式的。


相反,您可以使用其他解决方案之一来解决该问题。恕我直言unique_ptr不适合这个任务。有 a proposal P0052对于一个叫做 std::unique_resource 的东西专为此目的而设计。

我可能会因为提到这个而被否决,但也许你可以尝试使用 void *作为指针类型,并将 GLuint 转换为 void * .一般来说,这样的转换是不可移植的,并且可能会导致运行时异常,但在常见的 x86 平台上,您可能会侥幸逃脱。 Link to example that compiles .

关于c++ - 指向非指针编译错误的唯一指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50212876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com