Как получить необработанный указатель shared_ptr в C ++ 17? - PullRequest
0 голосов
/ 17 декабря 2018

Я работаю с библиотекой 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 голосов
/ 17 декабря 2018

shared_ptr::get() все еще существует в C ++ 17.

Его определение было просто уточнено .

До C ++ 17 он возвращал T*.Начиная с C ++ 17, он возвращает std::remove_extent_t<T>*.

Это изменение было сделано, чтобы отразить boost::shared_ptr обработку массивов .

Вы все еще можете использовать его.

...