0

これは一種のばかげた単純な質問です。私はC++を学んでいて、次のクラスがあります...

class Client
{
public:
    Window getWindow() { return window; };

private:
    Window window;
};

そして、私が疑問に思っているのは、私のプライベートオブジェクトまたはコピーgetWindow()への参照を返すのでしょうか?window代わりにここでポインタを使用する必要がありますか?

私を殺しているのは、Javaでは新しいキーワードによってオブジェクトがいつどこで作成されるかが非常に明確になり、CPPではそれがはるかに明確でなくなり、Cでの私の経験がさらに悪化することです。

ありがとう、-Cody

4

2 に答える 2

6

参照を返すように明示的に指定しない限り、コピーが返されます。少なくともc++では、ポインタを返すことはお勧めできません。

参照を返す&には、戻りタイプに追加する必要があります

class Client
{
public:
    Window& getWindow() { return window; };

private:
    Window window;
};

値を返すオーバーヘッドが心配な場合は、最新のすべてのコンパイラーがある程度そうすることが保証される場合があることに注意してくださいreturn value optimization。また、C ++ 11を使用している場合は、移動セマンティクスを利用することもできます。

于 2013-01-09T09:27:54.683 に答える
2

デフォルトでは、CおよびC++は値で戻ります。
メンバーのコピーを返します。優れたコンパイラーは、N/RVOを使用してコンストラクターをコピーするための追加の呼び出しを最適化する場合があります。

メンバー自体を返す必要がある場合(これは悪い考えです)、参照を返す必要があります。

 Window& getWindow() 
      ^^^ 
于 2013-01-09T09:27:13.400 に答える