Обычным правилом было бы то, что если вы можете взять ссылку, то вы делаете.Однако в случае f3 в вашем примере тот факт, что он удаляет указатель, говорит о том, что намного проще, если ваша функция получает указатель, поскольку никто не ожидал бы, что функция удалит ссылку.
f2 заставляет пользователяпередайте ненулевое значение, так что ссылка - хорошая идея.Предположительно, константно-корректно без какой-либо дополнительной информации, т. Е. F2 может изменить Obj, вызвав для него неконстантный метод.
Трудно понять, является ли дизайн хорошим с именами, такими как f1, f2 иf3.Иногда имена могут иметь все значение.Например, если имя f3 - «useAndDispose» или подобное, то для вызывающей функции ясно, что указатель будет удален после использования.
Аналогично, если ваша функция возвращает ресурс, который пользователь должен очиститьДа, имя, которое указывает на это (createSomething, а не getSomething), обычно предпочтительнее.
Даниэль сказал, что "обычно" вы не удаляете переданные вам указатели.Не "никогда", хотя.Эта функция, в частности, может быть функцией очистки или ситуацией рабочего процесса, когда что-то передается, а затем удаляется.
Я бы сказал, однако, что вы никогда не должны удалять переданные вам ссылки (принимая их адресво-первых, конечно), потому что никто, глядя на ваш код, не ожидал бы, что это сделает это.