2013-11-10 4 views
3

Я пытаюсь бросить auto_ptr опорожнить указатель следующим образом:Casting auto_ptr опорожнить указатель

void *AM::This2Ctx(std::auto_ptr<AMContext> data) 
{ 
return reinterpret_cast<void *>(data); 
} 

, но я получаю ошибку компиляции:

error: invalid cast from type std::auto_ptr<AMContext> to type void* 

как это отливка может быть сделано правильно? и как его можно использовать в обратном направлении?

ответ

4

Использование .get() для доступа указатель проводится автопреобразованиями PTR:

reinterpret_cast<void *>(data.get()); 
          ~~~~~~ 

Кроме того, auto_ptr является устаревшим, используйте вместо unique_ptr.

+0

Спасибо, но используя .get() переместит управление памятью обратно ко мне, не так ли? и как я могу отличить наоборот? – Itzik984

+0

Нет, не будет. Он просто показывает вам адрес. Я думаю, 'static_cast' лучше, чем' reinterpret_cast', вам не нужно такое низкоуровневое кастинг. – deepmax

+3

@ Itzik984 Предупреждение: если вы получаете необработанный указатель от умного указателя, этот указатель не знает вашего оригинального умного указателя. Если вы попытаетесь создать новый умный указатель из этого необработанного указателя позже, вы получите двойное удаление (как исходный, так и новый умный указатель удалит элемент). – Agentlien