相关疑难解决方法(0)

OpenGL纹理ID的范围是多少?

我有一个拥有属性Texture_ID的对象.我需要在构造函数中初始化Texture_ID的值,所以我想要一些OpenGL未使用的值来表示纹理尚未设置.

我不知道零(0)是否是一个好的值?如果有一个OpenGL应用于纹理ID的范围,我想要一个超出此范围的值.任何的想法?

c++ opengl graphics textures visual-c++

12
推荐指数
1
解决办法
5861
查看次数

智能指针管理的资源是什么,而内存不是由新分配的?

我继续看到"资源"与C++ Primer 5th的 "动态内存"相反 :

默认情况下,用于初始化智能指针的指针必须指向动态内存,因为默认情况下,智能指针用于delete释放关联的对象.我们可以将智能指针绑定到指向其他类型资源的指针.但是,要做到这一点,我们必须提供自己的操作来代替delete.


如果您使用智能指针来管理分配的内存以外的资源new,请记住传递删除器.

这里提到的资源是什么?

它是否表明:

与使用相比,有(其他)方式分配动态内存new.(不是所有的动态内存基本上都是使用new?)


更新:

我不清楚引用文本的原因是我在想某些东西是错误的,这就是我一直在想的智能指针只是为动态内存管理而发明的.所以这个例子使用智能指针管理非动态内存让我感到困惑.

老人的一个很好的解释:

智能指针根本不关心动态内存本身.它只是一种在需要时跟踪某些东西的方法,并在它超出范围时销毁它.提到文件句柄,网络连接等的要点是指出它们不是动态内存,但智能指针可以管理它们就好了.

c++

4
推荐指数
1
解决办法
106
查看次数

将 Vulkan 的 VkInstance 包装到 unique_ptr 中,无需额外的动态分配

我正在尝试将 VkInstance (不透明指针)包装起来,unique_ptr但似乎我不能。

...
    VkInstance instance;
    if (vkCreateInstance(&createInfo, nullptr, &instance) != VK_SUCCESS) {
        throw std::runtime_error("failed to create vulkan instance");
    }

    auto del = [](VkInstance* p) {
        DBG("release vk instance");
        vkDestroyInstance(*p, nullptr);
    };
    auto ptr = std::unique_ptr<VkInstance, decltype(del)>(instance, del);
...
Run Code Online (Sandbox Code Playgroud)

错误:

no instance of constructor "std::unique_ptr<_Tp, _Dp>::unique_ptr [with _Tp=VkInstance, _Dp=lambda [](VkInstance *p)->void]" matches the argument list
Run Code Online (Sandbox Code Playgroud)

我不明白为什么。VkInstance 是一个指针,所以我传递它,删除器必须接受指向内存地址的指针,所以它仍然接收它,但类型仍然不匹配。

使用 make_unique取消引用它&并将其传递给 make_unique 会导致段错误。说得通。

我设法让它仅与额外的新调用一起工作的唯一方法,如下所示:

no instance of constructor "std::unique_ptr<_Tp, _Dp>::unique_ptr [with _Tp=VkInstance, _Dp=lambda [](VkInstance *p)->void]" matches the argument …
Run Code Online (Sandbox Code Playgroud)

c++ unique-ptr vulkan c++17

1
推荐指数
1
解决办法
439
查看次数

标签 统计

c++ ×3

c++17 ×1

graphics ×1

opengl ×1

textures ×1

unique-ptr ×1

visual-c++ ×1

vulkan ×1