c++ - 带有需要原始指针的 API 的 unique_ptr?

标签 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++ 是我的首选语言。回来后看到所有的模式和做法都完全改变了,这有点令人震惊。

最佳答案

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

还有一个release() 成员函数,它放弃所有权。这意味着您回到了哑指针领域,清理是您的全部责任。

我不明白为什么代码首先使用 new 而不是 just using automatic storage objects ,但我会假装这是有原因的...

关于c++ - 带有需要原始指针的 API 的 unique_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9908535/

相关文章:

c++ - 如何修复此子类的初始化程序列表错误?

c++ - 数组重新分配 C++

c++ - 删除 std::unique_ptr<Base> 容器中的派生类

c++ - 在没有任何干预的情况下继续运行程序,直到它被要求退出

c++ - typedef 智能指针是不好的做法吗?

c++ - 在单元测试中初始化 unique_ptr

C++在 map 中插入unique_ptr

c++ - 在主线程中填充数据时从结构数组的较低索引元素读取是否线程安全

C++ 在循环中捕获异常并在循环结束后重新抛出?

c++ - 链式调用构造函数中 shared_from_this 的问题