Я имею в виду, в какой ситуации будет использование указателей будет более выгодным, чем просто передача по ссылке (как в Java?)
Ссылки в Java и многих других языках, в основном абстракции поверх указателей , В C (не C++) не было способа «передать по ссылке», как вы можете, в C++ со ссылками, поскольку эта абстракция не существовала, поэтому это никогда не было возможным. C++ добавил ссылки как новую абстракцию.
С C++ вы можете передавать по ссылке, и это часто бывает предпочтительным. Однако фактическое распределение динамической памяти по-прежнему будет на каком-то уровне работать с указателями.
Это, как говорится, есть некоторые вещи, которые вы можете сделать на C++ с указателями, которые могут привести к хорошей эффективности. Знание памяти и того, что там хранится, позволяет вам напрямую манипулировать этими данными без накладных расходов на абстракции, которые вы получаете на некоторых языках. Это не «безопасно» (легко сделать что-то опасное и плохое), но это часто полезно. (Полезно, что некоторые языки, такие как C#, также позволяют вам это делать, хотя они требуют, чтобы вы явно отметили этот код как «небезопасный», чтобы его разрешить.)
Как говорится, указатели обычно абстрагированы на C++. Smart Pointers обеспечивают множество преимуществ без побочных эффектов и опасностей при работе с «необработанными» указателями ...
Одной из наиболее важных причин существования _pointers_ является разрешение реализации языков типа «Java», где почти все - указатель ... На самом деле, это едва ли важная причина. –
Это может быть дубликат, но связанный вопрос не соответствует этому вопросу. – Pubby
Согласовано - это не дубликат этого вопроса. – Puppy