What does 'return *this' mean in C++?

你。 提交于 2019-11-27 14:16:43

问题


I'm converting a C++ program to C#, but this part has me confused. What does return *this mean?

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

How would it translate into C#?


回答1:


this means pointer to the object, so *this is an object. So you are returning an object ie, *this returns a reference to the object.




回答2:


Watch out that if you try to use return *this; on a function whose return type is Type and not Type&, C++ will try to make a copy of the object and then immediately call the destructor, usually not the intended behaviour. So the return type should be a reference as in your example.




回答3:


In your particular case, you are returning the reference to 'this', since the return type of the function is a reference (&).

Speaking of the size of returned memory, it is the same as

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

But the usage at call time differs.

At call time, you will call store the return value of the function by something like:

Message& m = GetProtoMsg();



回答4:


Using a pointer we can directly access the value stored in the variable which it points to. To do this, we simply have to precede the pointer's identifier with an asterisk (*), which acts as dereference operator and that can be literally translated to "value pointed by".




回答5:


You are just returning a reference to the object. this is a pointer and you are dereferencing it.

It translates to C# return this; in the case that you are not dealing with a primitive.




回答6:


Like in C# this is an implicit pointer to the object you are currently using.
In your particular case, as you return a reference & to the object, you must use *this if you want to return the object you are currently working on.
Don't forget that a reference takes the variable itself, or in case of a pointer (this), the object pointed to (*this), but not the pointer (this).



来源:https://stackoverflow.com/questions/18162522/what-does-return-this-mean-in-c

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!