Что делает метод _Get для std :: weak_ptr и когда его следует использовать?

Я читал об умных указателях, в частности о слабых указателях. Я понял, что у слабых указателей нет аналогичного get() метода, как у общих указателей, потому что неясно, указывает ли слабый указатель на что-нибудь. Затем я обнаружил, что Intellisence предлагает _Get() метод.

Что именно делает _Get() метод std :: weak_ptr и когда его следует использовать?


person oddRaven    schedule 09.11.2016    source источник


Ответы (1)


Никогда. Имена с подчеркиванием и заглавными буквами зарезервированы для реализации. Вы, как пользователь, никогда не должны их использовать. Кроме того, он не указан в weak_ptr интерфейсе, поэтому код написан в зависимости от него не было бы портативным.

Что касается того, что он делает: вероятно, это какая-то вспомогательная функция. Поскольку он зарезервирован для реализации для любого использования, нет смысла углубляться в него дальше, поскольку он может изменяться (или исчезать) даже между второстепенными версиями.

N4140 § 17.6.4.3.2 [global.names] / 1

Определенные наборы имен и сигнатур функций всегда зарезервированы для реализации: - Каждое имя, содержащее двойное подчеркивание __ или начинающееся с подчеркивания, за которым следует заглавная буква (2.12), зарезервировано для реализации для любого использования.

person krzaq    schedule 09.11.2016
comment
Почему функция публичная? - person oddRaven; 09.11.2016
comment
@oddRaven Не знаю. Возможно, это имеет смысл в стандартной библиотеке, поставляемой с вашим компилятором. Однако это определенно не должно показываться вам как предложение завершения кода. - person krzaq; 09.11.2016