Seems like shared_ptr dont like COM interfaces
std::shared_ptr<IDirect3DVertexBuffer9> spNewBuffer(new IDirect3DVertexBuffer9, [](IDirect3DVertexBuffer9 *ptr){ptr->Release();} );
Gives errors:
error C2259: 'IDirect3DVertexBuffer9' : cannot instantiate abstract class
1> due to following members:
1> 'HRESULT IDirect3DVertexBuffer9::QueryInterface(const IID &,void **)' : is abstract
1> c:\program files (x86)\microsoft directx sdk (june 2010)\include\d3d9.h(1478) : see declaration of 'IDirect3DVertexBuffer9::QueryInterface'
1> 'ULONG IDirect3DVertexBuffer9::AddRef(void)' : is abstract
1> c:\program files (x86)\microsoft directx sdk (june 2010)\include\d3d9.h(1479) : see declaration of 'IDirect3DVertexBuffer9::AddRef'
1> 'ULONG IDirect3DVertexBuffer9::Release(void)' : is abstract
1> c:\program files (x86)\microsoft directx sdk (june 2010)\include\d3d9.h(1480) : see declaration of 'IDirect3DVertexBuffer9::Release'
1> 'HRESULT IDirect3DVertexBuffer9::GetDevice(IDirect3DDevice9 **)' : is abstract
1> c:\program files (x86)\microsoft directx sdk (june 2010)\include\d3d9.h(1483) : see declaration of 'IDirect3DVertexBuffer9::GetDevice'
1> 'HRESULT IDirect3DVertexBuffer9::SetPrivateData(const GUID &,const void *,DWORD,DWORD)' : is abstract
1> c:\program files (x86)\microsoft directx sdk (june 2010)\include\d3d9.h(1484) : see declaration of 'IDirect3DVertexBuffer9::SetPrivateData'
1> 'HRESULT IDirect3DVertexBuffer9::GetPrivateData(const GUID &,void *,DWORD *)' : is abstract
1> c:\program files (x86)\microsoft directx sdk (june 2010)\include\d3d9.h(1485) : see declaration of 'IDirect3DVertexBuffer9::GetPrivateData'
1> 'HRESULT IDirect3DVertexBuffer9::FreePrivateData(const GUID &)' : is abstract
1> c:\program files (x86)\microsoft directx sdk (june 2010)\include\d3d9.h(1486) : see declaration of 'IDirect3DVertexBuffer9::FreePrivateData'
1> 'DWORD IDirect3DVertexBuffer9::SetPriority(DWORD)' : is abstract
1> c:\program files (x86)\microsoft directx sdk (june 2010)\include\d3d9.h(1487) : see declaration of 'IDirect3DVertexBuffer9::SetPriority'
1> 'DWORD IDirect3DVertexBuffer9::GetPriority(void)' : is abstract
1> c:\program files (x86)\microsoft directx sdk (june 2010)\include\d3d9.h(1488) : see declaration of 'IDirect3DVertexBuffer9::GetPriority'
1> 'void IDirect3DVertexBuffer9::PreLoad(void)' : is abstract
1> c:\program files (x86)\microsoft directx sdk (june 2010)\include\d3d9.h(1489) : see declaration of 'IDirect3DVertexBuffer9::PreLoad'
1> 'D3DRESOURCETYPE IDirect3DVertexBuffer9::GetType(void)' : is abstract
1> c:\program files (x86)\microsoft directx sdk (june 2010)\include\d3d9.h(1490) : see declaration of 'IDirect3DVertexBuffer9::GetType'
1> 'HRESULT IDirect3DVertexBuffer9::Lock(UINT,UINT,void **,DWORD)' : is abstract
1> c:\program files (x86)\microsoft directx sdk (june 2010)\include\d3d9.h(1491) : see declaration of 'IDirect3DVertexBuffer9::Lock'
1> 'HRESULT IDirect3DVertexBuffer9::Unlock(void)' : is abstract
1> c:\program files (x86)\microsoft directx sdk (june 2010)\include\d3d9.h(1492) : see declaration of 'IDirect3DVertexBuffer9::Unlock'
1> 'HRESULT IDirect3DVertexBuffer9::GetDesc(D3DVERTEXBUFFER_DESC *)' : is abstract
1> c:\program files (x86)\microsoft directx sdk (june 2010)\include\d3d9.h(1493) : see declaration of 'IDirect3DVertexBuffer9::GetDesc'