unique_ptr有一个期望原始指针的API?

时间:2012-03-28 13:28:09

标签: c++ c++11 smart-pointers

使用托管内存和函数式语言大约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不是正确使用的智能指针。

enter image description here

在转向其他事情之前,C ++是我的首选语言。这有点令人震惊,并且看到所有的模式和实践已经彻底改变了。

2 个答案:

答案 0 :(得分:14)

有一个get()成员函数,它为您提供unique_ptr所持有的原始指针。但这并不会导致unique_ptr放弃所有权,因此仍然会进行适当的清理(小心存储原始指针!)。

还有release()成员函数,放弃所有权。这意味着你回到了愚蠢的指针之地,清理是你的全部责任。

我无法理解为什么代码首先使用new而不是just using automatic storage objects,但我会假装有理由......

答案 1 :(得分:3)

get成员函数返回底层指针,只要该代码不管理您传入的内存,就可以使用现有代码。