Если я правильно понял вопрос ...
Ссылка в качестве параметра функции вместо указателя:
Как вы указали, указатель не дает понять, кому принадлежит очистка / инициализация указателя. Предпочитайте общую точку, когда вам нужен указатель, она является частью C ++ 11, а слабый_птр, когда достоверность данных не гарантируется в течение всего времени жизни класса, принимающего указанные данные .; также часть C ++ 11.
Использование ссылки в качестве параметра функции гарантирует, что ссылка не является нулевой. Чтобы обойти это, вы должны подорвать языковые функции, а нам не нужны свободные кодеры пушек.
Ссылка на переменную-член:
Как указано выше в отношении достоверности данных. Это гарантирует, что указанные данные, на которые они ссылаются, действительны.
Перенос ответственности за достоверность переменных на более раннюю точку в коде не только очищает более поздний код (класс A в вашем примере), но также и дает понять, кто его использует.
В вашем примере, который немного сбивает с толку (я действительно попытался бы найти более четкую реализацию), A, используемый B, гарантирован на время жизни B, поскольку B является членом A, поэтому ссылка подтверждает это и (возможно) более ясна.
И на всякий случай (что маловероятно, так как это не имеет никакого смысла в контексте вашего кода), другая альтернатива - использовать параметр без ссылки, без указателя A, скопировать A и создать парадигму бесполезно - я действительно не думаю, что вы имеете в виду в качестве альтернативы.
Кроме того, это также гарантирует, что вы не сможете изменить ссылочные данные, где указатель может быть изменен. Константный указатель будет работать, только если ссылка / указатель на данные не будет изменяемой.
Указатели полезны, если параметр A для B не гарантированно был установлен или мог быть переназначен. И иногда слабый указатель слишком многословен для реализации, и многие люди либо не знают, что такое слабый_птр, либо просто не любят их.
Разорвите этот ответ, пожалуйста:)