Вы не можете сделать это, пока не передадите указатель на указатель или ссылку на указатель ( пример здесь ):
void replaceBy(Foo*& foo, Foo* bar) {
delete foo;
foo = bar;
}
//...
foo->replaceBy(foo, bar);
Что бы победить цель replaceBy
являясь нестатической функцией-членом.
Для этого также существует макрос überevil ( не ):
#define FOO_REPLACE_BY(foo, bar) do {delete foo; foo = bar;} while(0)
Я рекомендую вам перегрузить operator=
и избегать указателей, когда это возможно, или, по крайней мере, использовать интеллектуальные указатели (которые позволяют назначать указатели без утечек памяти).