如何在 C++17 中获取 shared_ptr 的原始指针?

How to get the raw pointer of a shared_ptr in C++17?

我正在使用 C 库并希望将对象指针隐藏到 shared_ptr。假设 C 库有...

T* CreateObject();
void DoStuff(T*);
void DestroyObject(T*);

那我可以做...

std::shared_ptr<T> sptr(CreateObject(), DestroyObject);

虽然我可以将 CreateObject 方法的指针放入 shared_ptr,并使用自定义删除器调用 DestroyObject 方法,但存在访问原始指针以调用 DoStuff 的问题。我注意到 shared_ptr::get() 方法,但据我所知,它已在 C++17 中删除。

shared_ptr::get() 在 C++17 中仍然存在。

它的定义是merely refined

在C++17之前,它返回T*。从 C++17 开始,它 returns std::remove_extent_t<T>*.

此更改是为了镜像 boost::shared_ptrhandling of arrays

你可能还会用到它。