誰かがこれが実際に何を表しているのか説明できますか?
Foo *getfoo()
{
return foo_object;
}
Foo
ここにクラスがあります。私の質問は、関数名の前のポインタは何を表しているのですか?
名前の直前にアスタリスクを追加するのが好きな人もいます。私は個人的にこの構文を好みます:
Foo * getfoo () {
return foo_object;
}
Foo *
これは、関数が返す型(のように)をもう少し明確に示していると思いますint
。
これは、関数がポインターを返すことを意味します。そして、type
そのポインタは、ポインタの前に記載されているものです。つまり、ポインタはタイプになりますFoo
。Foo
これはあなたが言ったようにでclass
あり、関数はクラスオブジェクトポインタを返します。
他の人が指摘したように、「Foo *」構文は、関数がオブジェクト自体ではなく、メモリ内の場所へのポインタを返すことを意味します。
このポインタを取得した場合、これはgetfoo()がメモリを割り当てることができたことを意味します。したがって、自分で解放する必要がある可能性があります。そうしないと、プログラムの実行中ずっとこのメモリが割り当てられます。これはメモリリークと呼ばれます。
メモリを解放する例を次に示します。
class Foo {};
Foo *getfoo() {
Foo *f = new Foo(); // Memory allocated here
return f;
}
int main () {
Foo *g = getfoo();
// some code here
delete(g); // free the memory as "g" is no longer needed.
return 0;
}
C ++では、メモリの管理方法を学ぶことが重要です。そうしないと、遅かれ早かれ、アプリは失敗します。それを支援するプログラミングパターンがいくつかありますが、その中で最も人気のあるのはスマートポインタです。
getfoo関数は、(クラスfooの)オブジェクトポインタを返します。