关于当前对象的C ++指针和地址说明

时间:2013-04-16 22:35:35

标签: c++ pointers

到目前为止,据我所知,在定义指针变量时,我们在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()的目的是什么。如果我在退回*而不是Foo*时从this函数中删除了*this,为什么会出现错误?

编辑:

另外,原因是:

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

产生1而不是2?

5 个答案:

答案 0 :(得分:2)

  

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

Foo* get_pointer()

Foo*是指向Foo对象的指针

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

答案 1 :(得分:1)

this,总是C ++中的指针,尽管你没有在任何地方明确提到它。因此,在返回this指针时,应使用Foo*

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

答案 2 :(得分:1)

*是该类型的一部分。因此,int表示类型int,和 int*类型指向int的指针。如果函数返回指针 对于int,它是int* foo(),如果它返回一个指针 FooFoo* Foo::get_pointer()

该定义为已定义的对象保留空间。一个 声明不保留任何空间和事物的定义 不是对象(例如引用或函数)不保留 任何空间,至少不是你能看到的。 (显然,一个 函数确实存在于内存的某个地方,并且在很多情况下,存在 编译器也需要空间来实现a 参考。但它们在C ++范围内是不可见的。)

答案 3 :(得分: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的类型为Foo*(指向Foo对象的指针),而*this的类型为Foo(Foo对象)。

答案 4 :(得分:-1)

"this" is a pointer
您想要返回指向实例的指针(特定的已分配对象)。

 Foo* get_pointer(){
            return this;
        }

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

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

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