«Обнаженный указатель» - это «простой» указатель, т. Е. То, что в стандарте и любой другой книге по C ++ указатель вызова.Это обычный «T *
» (где T
- это тип того, на что указывает указатель).
Появилась «голая» терминология, которая противопоставляет их умным указателям,это классы, которые во многих отношениях ведут себя как указатели (обычно они перегружают операторы *
, ->
, а в некоторых случаях []
).
Умные указатели являются «умными», поскольку они задают и применяют некоторыесемантика владения, устранение «немоты» обнаженных указателей: на самом деле обнаженные указатели не указывают / не знают, имеют ли они собственный объект, на который они ссылаются (например, должен ли он быть освобожден, когда указатель выходит изscope) и, даже если с некоторым соглашением об именах известно, что некоторый указатель владеет объектом, если указывает на него, язык не применяет это, поэтому, если указатель выходит из области видимости, и никто не освобождает указанный объект вручную (обычно это происходитесли возникает исключение) у вас утечка памяти.
Умные указатели вместо этого используют гарантии системы типов C ++ (копияконструктор, оператор присваивания, гарантированные вызовы деструктора, ...) для установления и обеспечения некоторого типа владения (как правило: строгого и непередаваемого, строгого, но может передаваться другому интеллектуальному указателю, совместно используемому несколькими интеллектуальными указателями).
... как говорится, в StackOverflow и в Интернете существует множество дискуссий об интеллектуальных указателях, и я уверен, что вы сможете найти более подробные обсуждения интеллектуальных указателей и объяснений, почему использовать голые указатели, которые владеют объектами.обычно это плохая вещь TM в современной программе на C ++.