2011-03-20 1 views
3

Я пытаюсь написать свой собственный слабый/сильный указатель, но я не совсем понимаю отношения. Все, что я, кажется, встретил, не делает этого и не ясно, и довольно часто один документ будет упускать из виду то, что говорит другой документ. Может ли кто-нибудь объяснить объяснение отношения «слабый/сильный» в деталях, возможно, образ или образец кода?Слабая/сильная ссылка Ссылка указателя

(Пожалуйста, не просто скажите мне «использовать boost» или «use tr1» и т. Д. Это не домашнее задание, я хочу учиться).

+0

Возможно, вам будет интересно наблюдать [это видео] (http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Stephan-T-Lavavej-Advanced-STL-1-of-n) , – fredoverflow

+0

Это нормально, чтобы учиться. Но нужно уметь понять, как работает двигатель автомобиля, прежде чем приступить к работе над двигателем лука. Основные принципы могут быть одинаковыми, но есть множество специализированных знаний. Если вы хотите увидеть, как работает профессиональная версия, взломайте open boost и попытайтесь понять их реализацию в первую очередь. –

ответ

8

Сильный указатель владеет базовым необработанным указателем. Его существование может содержать живой указатель, и в результате он не может указывать на то, что было очищено. Его уничтожение может привести к удалению по необработанному указателю. Слабый указатель знает только необработанный указатель и остается ли он действительным. Он не сохраняет активный указатель существующим, и он не может заставить очищенный указатель уйти, очистившись.

Чтобы получить более подробный ответ, вам нужно будет показать найденные противоречия или вопрос, который у вас есть о конкретной части определения.

+0

IMHO было бы полезно добавить здесь разницу между weak_ptr и raw pointer - weak_ptr знает, был ли объект удален или нет, а попытка получить доступ к удаленному объекту через weak_ptr приведет к появлению _defined_ behavior - exception – maxim1000