0

誰かがこれが実際に何を表しているのか説明できますか?

Foo *getfoo()
{
    return foo_object;
}

Fooここにクラスがあります。私の質問は、関数名の前のポインタは何を表しているのですか?

4

4 に答える 4

1

名前の直前にアスタリスクを追加するのが好きな人もいます。私は個人的にこの構文を好みます:

Foo * getfoo () {
  return foo_object;
}

Foo *これは、関数が返す型(のように)をもう少し明確に示していると思いますint

于 2013-03-01T07:28:52.663 に答える
1

これは、関数がポインターを返すことを意味します。そして、typeそのポインタは、ポインタの前に記載されているものです。つまり、ポインタはタイプになりますFooFooこれはあなたが言ったようにでclassあり、関数はクラスオブジェクトポインタを返します

于 2013-03-01T07:29:17.597 に答える
1

他の人が指摘したように、「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 ++では、メモリの管理方法を学ぶことが重要です。そうしないと、遅かれ早かれ、アプリは失敗します。それを支援するプログラミングパターンがいくつかありますが、その中で最も人気のあるのはスマートポインタです。

于 2013-03-01T07:38:15.500 に答える
0

getfoo関数は、(クラスfooの)オブジェクトポインタを返します。

于 2013-03-01T07:21:41.887 に答える