2013-08-10 82 views
7

私はC++プログラムをC#に変換していますが、この部分は混乱しています。それは何を意味するのでしょうか?C++では 'return * this'の意味は何ですか?

template< EDemoCommands msgType, typename PB_OBJECT_TYPE > 
class CDemoMessagePB : public IDemoMessage, public PB_OBJECT_TYPE 
{ 
    (...) 
    virtual ::google::protobuf::Message& GetProtoMsg() { return *this; } 
} 

どのようにしてC#に変換されますか?

+0

タグはC++である必要があります。 –

答えて

13

thisオブジェクトへのポインタを意味し、そう*thisはオブジェクトです。したがって、オブジェクトを返すことになります。つまり、*thisはオブジェクトへの参照を返します。

2

オブジェクトへの参照を返すだけです。 thisはポインタで、逆参照しています。

プリミティブを扱っていない場合は、C#return this;に変換されます。

2

具体的なケースでは、関数の戻り値の型が参照(&)なので、 'this'への参照を返しています。

返されるメモリの大きさといえば、それは

virtual ::google::protobuf::Message* GetProtoMsg() { return this; } 

と同じしかし、通話時間の使い方が異なるです。

通話時には、あなたのような何かに関数の戻り値を格納呼び出します:

Message& m = GetProtoMsg(); 
+1

ポインタを返すのと同じではありません。それは似たようなものです。 – juanchopanza

+0

正しい。編集済み^^ – Lake

1

ポインタを使用して、ポインターを指す変数に格納されている値に直接アクセスできます。これを行うには、単にポインタの識別子の前にアスタリスク(*)を付ける必要があります。アスタリスク(*)は、dereferenceという演算子として機能し、文字通りが指す値に変換できます。

1

C#のようにthisは、現在使用しているオブジェクトへの暗黙的なポインタです。
具体的には、参照番号&をオブジェクトに返すときに、現在作業しているオブジェクトを返す場合は、*thisを使用する必要があります。
参照は変数そのものを取るか、ポインタ(this)の場合はオブジェクトが(*this)を指すが、ポインタ(this)は指さないことを忘れないでください。

8

は、あなたがその戻り値の型TypeないType&ある機能にreturn *this;を使用しようとすると、C++はオブジェクトのコピーを作成しようとし、その後すぐにデストラクタ、通常は意図した動作を呼び出すことは注意してください。戻り値の型は、例のように参照型にする必要があります。

関連する問題