问题标签 [this-pointer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
232 浏览

c++ - Visual C++ 编译器如何将 this ptr 传递给被调用函数?

我正在使用 Eckel 的“Thinking in C++”学习 C++。它声明如下:

  • 如果一个类包含虚方法,则为该类创建一个虚函数表等。大致解释了函数表的工作原理。(我知道 vtable 不是强制性的,但 Visual C++ 会创建一个。)
  • 调用对象作为参数传递给被调用函数。(这可能不适用于 Visual C++(或任何编译器)。)我试图找出 VC++ 如何将调用对象传递给函数。

为了在 Visual C++ 中测试这两个点,我创建了以下类(使用 Visual Studio 2010,WinXP Home 32bit):

字节检查器.h:

ByteExaminer.cpp:

The navigation through the vtable in bruteFG() works - when I call fg[0](this), f() is called. What does NOT work, however, is the passing of this to the function - meaning that this->b[0] is not printed correctly (garbage comes out instead. I'm actually lucky this doesn't produce a segfault).

So the actual output for

is:

So how should I proceed to get the correct result? How are the this pointers passed to functions in VC++?

(Nota bene: I'm NOT going to program this way seriously, ever. This is "for the lulz"; or for the learning experience. So don't try to convert me to proper C++ianity :))

0 投票
5 回答
2769 浏览

c++ - 限制成员函数的限定符(限制 this 指针)

注意:为了澄清,问题不是关于restrict关键字的一般使用,而是具体关于将其应用于成员函数,如此处所述

gcc 允许您在成员函数上使用__restrict__(相当于 C99 的 GNU++ restrict)限定符,有效地this在函数范围内创建一个限制限定指针。牛肉在哪里?

大多数成员函数在其他成员上工作,通过 访问它们this,这是一个T* const(并且通常是无别名的)。为了this可能被别名,需要在成员函数中以某种方式使用第二个指向类型的指针,并且它必须来自某个地方。
这是非成员函数经常出现的情况,例如所有二元运算符或任何其他自由函数,它们至少需要两个相同的非平凡类型的指针或引用。但是,这些函数没有 a this,因此它们不相关。

赋值运算符、复制构造函数和一元比较运算符是原则上可以使用别名的成员函数的示例this 因为另一个对象是通过引用传递的)。因此,为这些分配一个限制限定符才真正有意义——编译器应该已经很明显所有其他函数都具有限制属性(因为从来没有第二个指向 T 的指针)。

现在,例如,如果您使用restrictonoperator=您应该因此根本不检查自分配,因为您说的this是在该函数的范围内没有别名(如果这是真的,则不可能发生自分配)。
显然,这是你不可能事先知道的事情,也是没有意义的事情。

那么,在什么情况下,人们实际上想要给成员函数一个限制限定符,并且它在哪里有意义?

0 投票
3 回答
316 浏览

java - 在小型聊天客户端中通过静态引用成员发送类实例

我正在用 Java 构建一个小型聊天室应用程序。我在这里尝试做的是通过静态 ClientGUI 引用成员发送当前类 ClientGUI 实例(this)。ServerApplication 类应该通过常规的静态 getter(在 ServerApplication.main 中完成)接收当前的 clientGUI 引用。

经过一些令人厌烦的调试后,我仍然无法弄清楚服务器端引用在收到 ClientGUI ref 后为什么仍然为空(getCurrentClientGuiReference() 失败)。

(当然 - 发送的 ref 在传输到服务器端之前被初始化)。

不能通过本地静态 ref 成员传输当前 ref 吗?也许我错过了什么?

波纹管是相关的代码。

提前致谢。

客户端:

}

服务器端:

0 投票
5 回答
450 浏览

c++ - c++这个指针问题

事情就是这样,我想要(可能不是最好的事情)能够调用一些类构造函数,该构造函数接收作为参数的指向正在调用的类的指针(ufff !!!)。好吧,代码看起来更好,就像我在 C# 中所做的那样。

那么,如何在 c++ 中实现相同的结果?提前谢谢。

0 投票
3 回答
263 浏览

c++ - 为什么在 C++ 中不推荐使用“this”作为非 const

为什么this在 C++ 中被弃用?C++中的this指针与 Java 中的指针有何不同this

还是维基百科错了

早期版本的 C++ 允许更改 this 指针;通过这样做,程序员可以更改方法正在处理的对象。这个特性最终被弃用了,现在 C++ 中的 this 是 const 。

0 投票
0 回答
200 浏览

java - 如何到达对象引用本身

当我在上面调用时,我想在下面的块中到达对象本身。我的意思是我想用 getCount() 方法达到 newDt 对象的计数。我尝试使用 this 关键字,但它没有运行。我该怎么做呢?

0 投票
3 回答
675 浏览

c++ - “this”指针 (C++)

有这样的类定义:

我改变的是向 FullO3CPU 添加另一个参数

但是我不知道该怎么办

因为我收到此错误:

0 投票
3 回答
919 浏览

javascript - Jquery - 无法使用 $(this) 定位正确的元素

可能重复:
$(this) 在函数中不起作用

我在我的代码中定位正确的元素时遇到问题。我的页面上有一个缩略图列表,当您单击“我不喜欢这个”图标时,目标视频会更改为另一个。

这是HTML

阿贾克斯是:

我在做什么错?甚至 $(this).css("border","1px solid red") 都不是“工作”。(我尝试了背景颜色和颜色)我什么也没看到。

$(This) 指的是调用函数的“a”标签吗?所以我正在寻找他的父母名为 videobox... 帮助?

所以我可以定位吗

0 投票
3 回答
1983 浏览

c++ - 连接功能

this下面的 QT 函数调用是什么?

我知道thisC++ 的背景,但是this这个函数调用指向什么?

0 投票
2 回答
66475 浏览

c++ - std::shared_ptr 这个

我目前正在尝试学习如何使用智能指针。然而,在做一些实验时,我发现了以下情况,我找不到令人满意的解决方案:

想象一下,您有一个 A 类对象是 B 类对象(子对象)的父对象,但两者应该彼此认识:

问题是 A 类的对象如何将std::shared_ptr自身的 a ( this) 传递给它的子对象?

有 Boost 共享指针(Getting a boost::shared_ptrforthis)的解决方案,但是如何使用std::智能指针来处理呢?