Вместо этого вы можете передать адрес указателя с тем же значением, что и x
.
int main() {
T *x = new T[5];
T const *y = x;
f(&y);
}
Когда возвращается f
, вы можете скопировать значение обратно в x
.
Вы также можете разыграть адрес. Запись через T const *
в объект типа T *
не является нарушением псевдонимов.
int main() {
T *x = new T[5];
f(const_cast<T const**>(&x));
}
Тот факт, что это действительно так, менее очевиден, чем, по-моему, просто передача копии и последующее присвоение обратно x
.