1

それが何と呼ばれているか思い出せませんが、Java でできることは知っています。次のものがあるとします。

class Foo
{
public:
    Foo() {};
    void bar() {};
};

私はこれをしたい:

int main() {
    (new Foo).bar();
}

しかし、うまくいかないようです。これを行う必要なくこれを行う同様の方法はありますか:

int main() {
    Foo foobar;
    foobar.bar();
}
4

3 に答える 3

5

new動的に-メモリを割り当て、ポインタを返します。クラスメンバーは、間接演算子を使用して取得され->ます。メモリリークを引き起こすリスクがあるため、これがあなたが探しているものではないと思います。のコンストラクターを呼び出すだけで、Foo必要なことを実行できます。

Foo().bar();

のコンストラクターを呼び出すFooことにより、データメンバーを取得できる一時オブジェクトを作成します。これは、メモリリークやポインタの削除に対処する必要がないため、ポインタよりも優先されます。

于 2012-12-22T21:39:20.493 に答える
4

あなたは言うことができます(new Foo)->bar();。それは機能しますが、絶対にばかげています。正しいことはこれです:

int main()
{
    Foo x;
    x.bar(); 
}

または、ローカル変数が必要ない場合: Foo().bar();. しかし、Fooステートフルである必要がなければ、おそらくクラスはまったく必要ないので、これには疑問があります。無料の関数(Java には存在しないもの) を作成barするだけです。

void bar();

int main()
{
    bar();
}
于 2012-12-22T21:38:21.990 に答える
1

はい、Foo().bar();newJavaのように使用する必要はありません。

于 2012-12-22T21:38:51.350 に答える