在C ++中'返回*这个'是什么意思?

时间:2013-08-10 13:49:54

标签: c++ pointers this

我将C ++程序转换为C#,但这部分让我感到困惑。什么回报*这意味着什么?

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

它将如何转化为C#?

6 个答案:

答案 0 :(得分:15)

this表示指向对象的指针,因此*this是一个对象。所以你要返回一个对象,即*this返回对象的引用。

答案 1 :(得分:10)

请注意,如果您尝试在返回类型为return *this;而非Type的函数上使用Type&,C ++将尝试复制该对象,然后立即调用析构函数,通常不是预期的行为。因此,返回类型应该是您的示例中的引用。

答案 2 :(得分:3)

在您的特定情况下,您将返回对“this”的引用,因为函数的返回类型是引用(&amp;)。

说到返回内存的大小,它与

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

但是通话时的使用情况有所不同。

在通话时,您将通过以下方式调用存储函数的返回值:

Message& m = GetProtoMsg();

答案 3 :(得分:2)

您只是返回对象的引用。 this是一个指针,您正在取消引用它。

如果您没有处理原语,它会转换为C#return this;

答案 4 :(得分:2)

使用指针我们可以直接访问存储在它指向的变量中的值。要做到这一点,我们只需要在指针的标识符前面加上一个星号(*),它用作dereference运算符,并且可以直接翻译为“ 指向的值”。

答案 5 :(得分:1)

与C#一样this是指向您当前使用的对象的隐式指针 在您的特定情况下,当您向对象返回引用&时,如果要返回当前正在处理的对象,则必须使用*this
不要忘记引用接受变量本身,或者在指针(this)的情况下,对象指向(*this),而不是指针(this)。