我有一个拥有属性Texture_ID的对象.我需要在构造函数中初始化Texture_ID的值,所以我想要一些OpenGL未使用的值来表示纹理尚未设置.
我不知道零(0)是否是一个好的值?如果有一个OpenGL应用于纹理ID的范围,我想要一个超出此范围的值.任何的想法?
我继续看到"资源"与C++ Primer 5th的 "动态内存"相反 :
默认情况下,用于初始化智能指针的指针必须指向动态内存,因为默认情况下,智能指针用于
delete释放关联的对象.我们可以将智能指针绑定到指向其他类型资源的指针.但是,要做到这一点,我们必须提供自己的操作来代替delete.
如果您使用智能指针来管理分配的内存以外的资源
new,请记住传递删除器.
这里提到的资源是什么?
它是否表明:
与使用相比,有(其他)方式分配动态内存new.(不是所有的动态内存基本上都是使用new?)
我不清楚引用文本的原因是我在想某些东西是错误的,这就是我一直在想的智能指针只是为动态内存管理而发明的.所以这个例子使用智能指针管理非动态内存让我感到困惑.
老人的一个很好的解释:
智能指针根本不关心动态内存本身.它只是一种在需要时跟踪某些东西的方法,并在它超出范围时销毁它.提到文件句柄,网络连接等的要点是指出它们不是动态内存,但智能指针可以管理它们就好了.
我正在尝试将 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)