【发布时间】:2015-01-27 01:01:45
【问题描述】:
我正在使用 C++ 构建游戏,为了防止内存泄漏,我想确保从一开始就正确地完成所有操作。
目前,我有一个 D3D 类,其中包含我所有的 direct3D 内容。
但是,我的 Render() 方法在某些时候需要访问 DeviceContext。为此,我的 D3D 类必须从自身内部返回 ID3D11DeviceContext 指针。这意味着我有另一个对该 COM 对象的引用,而没有增加它的引用计数。
例如:
Render()
{
m_d3d.GetDevCon()->DoWhatever();
}
我可以这样使用它,这意味着我永远不必制作指针的外部副本吗?这会安全吗?我可以做些什么来保护我的程序免受坏事的影响,例如:
Render()
{
ID3D11DeviceContext* devCon = m_d3d.GetDevCon();
devCon->DoWhatever();
}
我可以看到这意味着引用计数与实际引用数不匹配。
基本上我想尽量避免使用原始指针。我想掌握的不仅仅是使用智能指针,而是知道何时使用它们。
【问题讨论】:
-
为什么渲染类中的 std::unique_ptr 不能解决您需要的问题?
-
它可能会,但是我对智能指针的了解很模糊,以至于我对如何使用它们一无所知。
-
听起来你试图阻止指针就位;考虑让
GetDevCon返回对 DeviceContext 的引用而不是指针。 -
所以 ID3D11DeviceContext& cD3D::GetDevCon() { return *m_devCon; } ?你也能为我定义“坐着”吗?术语从来都不是我的强项
标签: c++ windows-7-x64 smart-pointers directx-11