使用托管内存和函数式语言大约10年之后,我终于回到了C ++,而智能指针让我感到困惑。有一半的文档仍然是关于已弃用的auto_ptr
。
我正在尝试实施这个相当简单的Bullet "hello world"计划:
int _tmain(int argc, _TCHAR* argv[])
{
auto bp = unique_ptr<btBroadphaseInterface>(new btDbvtBroadphase);
auto cc = unique_ptr<btDefaultCollisionConfiguration>(new btDefaultCollisionConfiguration);
auto disp = unique_ptr<btDispatcher>(new btCollisionDispatcher(cc));
}
btCollisionDispatcher
构造函数想要一个btCollisionConfiguration*
,但我会给它一个unique_ptr
。
在这种情况下,我通常想做什么?如果有一种方法可以“去智能化”指针,有些东西会告诉我unique_ptr
不是正确使用的智能指针。
在转向其他事情之前,C ++是我的首选语言。这有点令人震惊,并且看到所有的模式和实践已经彻底改变了。
答案 0 :(得分:14)
有一个get()
成员函数,它为您提供unique_ptr
所持有的原始指针。但这并不会导致unique_ptr
放弃所有权,因此仍然会进行适当的清理(小心存储原始指针!)。
还有release()
成员函数,放弃所有权。这意味着你回到了愚蠢的指针之地,清理是你的全部责任。
我无法理解为什么代码首先使用new
而不是just using automatic storage objects,但我会假装有理由......
答案 1 :(得分:3)
get成员函数返回底层指针,只要该代码不管理您传入的内存,就可以使用现有代码。