Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “内存占用”;这";指针_C++_Class_Pointers_Memory - Fatal编程技术网

C++ “内存占用”;这";指针

C++ “内存占用”;这";指针,c++,class,pointers,memory,C++,Class,Pointers,Memory,有人能告诉我类对象中的指针“this”在创建时是否占用内存吗 class Temp { private: Temp &operator=(const Temp &t) { return *this; } } 此是正在调用其成员函数的对象的地址,它不需要存储在任何位置。 它通常通过将其值作为“隐藏”参数传递给成员函数来实现,因此它占用内存的方式与任何其他函数参数占用内存的方式相同 “面向对象”代码 通常会像以下“非面向对象”代码一样实现: 不,“this”本身已经是一个内

有人能告诉我类对象中的指针“this”在创建时是否占用内存吗

class Temp {
private:
    Temp &operator=(const Temp &t) { return *this; }
}

是正在调用其成员函数的对象的地址,它不需要存储在任何位置。
它通常通过将其值作为“隐藏”参数传递给成员函数来实现,因此它占用内存的方式与任何其他函数参数占用内存的方式相同

“面向对象”代码

通常会像以下“非面向对象”代码一样实现:


不,“this”本身已经是一个内存引用,因此它不会占用比对象更多的内存。

请用更多的词来解释您的问题。回答“是”对你意味着什么?如果“否”怎么办?不太确定你在问什么,但可能这是如此密切相关,它有帮助:
这是一个关键字,在运行时不会消耗任何大小<代码>此
生成一个具有通常指针大小的类指针
访问为实例隐式给定的函数/运算符调用参数(成员调用表达式中
->
/
左侧的参数),它可以存储在堆栈上,也可以不存储在寄存器中<代码>*此生成类的引用。该实例的大小和存储空间取决于其分配的位置。@Yunnosch:哈哈,我的问题确实不够详细,谢谢您的批评。我将在下一个问题@Scheff中做出改进:谢谢你的回答,这个答案对我很有帮助。我想我现在可以理解这个是如何工作的了。衷心感谢您的回答!我想这个答案让我对这个指针有了更深的理解。
struct A
{
    int f() { return this->x; }
    int x;
};

int g()
{
    A a;
    return a.f();
}
struct A
{
    int x;
};

int Af(A* self)
{
    return self->x;
}

int g()
{
    A a;
    return Af(&a);
}