我正在使用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中删除。
答案 0 :(得分:3)
shared_ptr::get()
在C ++ 17中仍然存在。
其定义为merely refined。
在C ++ 17之前,它返回T*
。从C ++ 17开始,它将返回std::remove_extent_t<T>*
。
此更改是为了反映boost::shared_ptr
的{{3}}。
您仍然可以使用它。