type *function()
と関数を定義すれば、C++でポインターを関数からreturnさせることが可能です。
int *sample_function( int *ptr1, int *ptr2) { if *ptr1 < *ptr2 return ptr1; else return ptr2; }
みたいな感じです。
やっちゃいけないこと
これ重要と思います。
関数内のローカル変数を参照したポインターを返してはダメです
言い換えると、関数内ローカル変数のアドレスを含むものをreturnしてはダメということです。
下記例でいうと、size変数はstack内に定義されており、関数内処理が終わってからもsizeのアドレス値は使い続けられる。
次回に同じ関数が呼ばれたり、違う関数が呼ばれたりして、ポインターが使うstackエリアが再利用される。
その時のポインターがデータを上書きしてしまう場合がある。
int *ng_function () { int size {}; . . return &size; }
int *ng_function2 () { int size {}; int size_ptr {&size} . . return size_ptr; }