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

时间:2018-12-17 19:15:26

标签: c++ c++17 shared-ptr

我正在使用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中删除。

1 个答案:

答案 0 :(得分:3)

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

其定义为merely refined

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

此更改是为了反映boost::shared_ptr的{​​{3}}。

您仍然可以使用它。