如何在 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_ptr
的 handling of arrays。
你可能还会用到它。
我正在使用 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_ptr
的 handling of arrays。
你可能还会用到它。