1

到目前为止,据我了解,在定义指针变量时,我们在 RAM 中为该变量分配空间。

int *p;  

将在 RAM 中定义一个空间。然后我们使用 `&variable' 为该指针分配一个内存地址。

我正在查看一个示例:*this vs this in C++ 代码是:

#include <iostream>

class Foo
{
    public:
        Foo()
        {
            this->value = 0;
        }

        Foo get_copy()
        {
            return *this;
        }

        Foo& get_copy_as_reference()
        {
            return *this;
        }

        Foo* get_pointer()
        {
            return this;
        }

        void increment()
        {
            this->value++;
        }

        void print_value()
        {
            std::cout << this->value << std::endl;
        }

    private:
        int value;
};

int main()
{
    Foo foo;
    foo.increment();
    foo.print_value();

    foo.get_copy().increment();
    foo.print_value();

    foo.get_copy_as_reference().increment();
    foo.print_value();

    foo.get_pointer()->increment();
    foo.print_value();

    return 0;
}

我不明白将*操作员放在前面Foo* get_copy()的目的是什么Foo* get_pointer()。如果我在返回not时*从函数中删除了,为什么会出现错误?Foo*this*this

编辑:

另外,为什么是:

foo.get_copy().increment();
foo.print_value();

产生 1 而不是 2?

4

5 回答 5

2

我不明白将*操作员放在前面Foo* get_copy()的目的是Foo* get_pointer()什么

Foo* get_pointer()

Foo*是一个指向对象的指针Foo

this也是一个隐式绑定到成员函数的调用对象的指针。这就是为什么这些函数的返回类型Foo*不是Foo.

于 2013-04-16T22:36:46.393 回答
1

this, 在 C++ 中始终是一个指针,尽管您没有在任何地方明确提及它。所以在返回 this 指针时,应该使用Foo*

this实际上是在函数调用过程中传递的隐式对象,它是指向调用函数的对象的指针

于 2013-04-16T22:37:36.460 回答
1

*是类型的一部分。所以int意味着 typeintint*type 指向的指针int。如果函数返回指向 int 的指针,则为int* foo(),如果返回指向 的指针 Foo,则为Foo* Foo::get_pointer()

定义为定义的对象保留空间。声明不保留任何空间,非对象(例如引用或函数)的定义也不保留任何空间,至少不是您可以看到的。(显然,函数确实存在于内存中的某个位置,在许多情况下,编译器也需要空间来实现引用。但它们在 C++ 范围内是不可见的。)

于 2013-04-16T22:42:31.640 回答
0

似乎您已经更改了您引用的示例中的代码,因此get_copy()不再返回副本。

*在您的代码示例中有两种使用方式。一种用于类型声明,另一种用于解引用运算符。

首先是类型声明:

int *p表示声明p为“指向 int 的指针”类型的变量。

Foo *get_pointer()意味着该函数get_pointer将返回一个“指向 Foo 对象的指针”类型的值。

现在取消引用:

*p意思是“p 指向的值”。

int a = 42; 
int *p;  // p is of type "pointer to an int"
p = &a;  // set p to the address of a (p now "points to" a)

a = 117;  // change the value of a
int x = *p; // set x to the value that p points to (which is a) - x will be 117

this只是一个指向对象的指针。*this意思是“this 指向的对象”。在您的示例this中是类型Foo*(指向 Foo 对象的指针),*this而是类型Foo(Foo 对象)。

于 2013-04-16T22:51:08.047 回答
-1

"this" is a pointer.
你想返回一个指向实例的指针(一个特定的分配对象)。

 Foo* get_pointer(){
            return this;
        }

或者你想返回一个指向副本的指针,分配一个新对象。

//need to implement the copy here
       Foo* get_copy(){
            return this;
        }

而不是引用(实例的地址)。这就是为什么你需要返回指针。

于 2013-04-16T22:42:12.983 回答