我如何将 shared_ptr<ID3D11Buffer> 转换为 ID3D11Buffer**
how would i convert shared_ptr<ID3D11Buffer> to ID3D11Buffer**
这个函数需要 **ID3D11Buffer
(其中 vertexBuffer.get()
当前是 )。我有以下代码:
shared_ptr<ID3D11Buffer> vertexBuffer;
this->graphicContext->GetDevice()->CreateBuffer( &bd, &srd, vertexBuffer.get() );
argument of type "ID3D11Buffer *" is incompatible with parameter of type "ID3D11Buffer **"
我如何获得指向指针的指针? vertexBuffer.get()
只是returns一个指针
不清楚 CreateBuffer
的语义是什么,也不清楚为什么要向它传递一个已经存在的缓冲区。
ID3D11Buffer* buf = vertexBuffer.get();
this->graphicContext->GetDevice()->CreateBuffer( &bd, &srd, &buf);
if (buf != vertexBuffer.get())
vertexBuffer = new shared_ptr<ID3D11Buffer> (buf);
这需要 ID3D11Buffer
拥有一个取得 ID3D11Buffer *
所有权的构造函数。如果没有它,这只会在函数从不创建缓冲区并且只需要一个 ID3D11Buffer **
的情况下起作用,这样它就可以在一个不存在的情况下创建一个。
您必须将缓冲区获取为原始指针:
ID3D11Buffer* vbptr;
HRESULT hr = this->graphicContext->GetDevice()->CreateBuffer( &bd, &srd, &vbptr);
IF(FAILED(hr))
{
// an error occurred...
}
然后使用调用 Release
:
的自定义删除器将其正确分配给 shared_ptr
std::shared_ptr<ID3D11Buffer> vertexBuffer(vbptr, &ID3D11Buffer::Release);
这个函数需要 **ID3D11Buffer
(其中 vertexBuffer.get()
当前是 )。我有以下代码:
shared_ptr<ID3D11Buffer> vertexBuffer;
this->graphicContext->GetDevice()->CreateBuffer( &bd, &srd, vertexBuffer.get() );
argument of type "ID3D11Buffer *" is incompatible with parameter of type "ID3D11Buffer **"
我如何获得指向指针的指针? vertexBuffer.get()
只是returns一个指针
不清楚 CreateBuffer
的语义是什么,也不清楚为什么要向它传递一个已经存在的缓冲区。
ID3D11Buffer* buf = vertexBuffer.get();
this->graphicContext->GetDevice()->CreateBuffer( &bd, &srd, &buf);
if (buf != vertexBuffer.get())
vertexBuffer = new shared_ptr<ID3D11Buffer> (buf);
这需要 ID3D11Buffer
拥有一个取得 ID3D11Buffer *
所有权的构造函数。如果没有它,这只会在函数从不创建缓冲区并且只需要一个 ID3D11Buffer **
的情况下起作用,这样它就可以在一个不存在的情况下创建一个。
您必须将缓冲区获取为原始指针:
ID3D11Buffer* vbptr;
HRESULT hr = this->graphicContext->GetDevice()->CreateBuffer( &bd, &srd, &vbptr);
IF(FAILED(hr))
{
// an error occurred...
}
然后使用调用 Release
:
shared_ptr
std::shared_ptr<ID3D11Buffer> vertexBuffer(vbptr, &ID3D11Buffer::Release);