问题标签 [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 投票
1 回答
472 浏览

c++ - C++ 将此类指针分配给 unique_ptr 或 shared_ptr

我有一个要从其继承的基类,在可以声明其任何派生类之前,必须首先声明基类的至少 1 个实例。我正在考虑this pointer将基类的 存储到其自己的 unique_ptr 成员变量中,而不是使用static_ptr. 此外,基类将跟踪其派生类的所有实例,直到声明另一个基类。这是我的类声明的样子:

所有派生类型都将从该基础公开继承,例如:

我在我的主要使用这个类层次结构的想法如下

我确实知道如何使用静态函数创建一个静态指针,以从类中获取 this 指针,以便在应用程序运行时只有一个实例。我只是想知道是否可以使用 shared_ptr 或 unique_ptr ,并且在成功创建至少一个基本类型的实例之后,然后将(this)指针保存到任一类型的智能指针中?我更喜欢做一个独特的父类“拥有”它自己的指针。

如果您需要更多信息,请告诉我,我会根据要求更新此问题,例如显示我的基类构造函数的定义。

0 投票
2 回答
1677 浏览

c++ - 继承自 std::enable_shared_from_this 的自身的自包含 shared_ptr

这个问题是这个问题的后续问题:原始问题

我有一个继承自的类,std::enable_shared_from_this该类包含一个std::shared_ptr<Self>

在我知道该类的详细信息完整且成功之后,在此类的任何构造函数中,如何将存储的内容分配std::shared_ptr<Self>shared this

例子:

0 投票
1 回答
601 浏览

c++ - 为什么有必要将“this”指针作为“arg”参数传递给 pthread_create

我的环境是 C++ for Linux-Xenomai on ARM gnueabi。成功生成新的 pthread 后,我发现类实例超出了线程的范围。从线程访问类实例对象、变量、结构等会返回任意值,并且通常会返回“分段错误”。

在花费了数天的繁重时间在网上寻找解决方案之后,我猜测并尝试使用“this”指针作为 pthread_create 的参数。瞧!类实例对线程可见。问题是为什么?

0 投票
1 回答
116 浏览

c++ - 我遇到了一些 C++ 代码。为什么我们必须在块中使用 *this 而不是 this?

我有以下代码,我想知道为什么它使用*this而不是this.

0 投票
3 回答
637 浏览

c++ - 在 C++ 中返回“This”对象的函数

因此,以下是在类外定义的类 Sales_data 的成员函数,

当函数被调用时,它被称为

我不理解的是函数返回*this,我知道它返回对象的一个​​实例,但它没有将该实例返回给我们在函数调用期间可以看到的任何东西,如果我不编写返回语句,它会工作吗有什么不同。

有人请详细解释,因为我只是不明白。

0 投票
2 回答
308 浏览

c++ - 为什么在取消引用/释放动态创建的对象之后,它仍然在 C++ 中被引用?

  1. 调用对象的析构函数后,它仍然像在内存中一样引用吗?为什么?
  2. 为什么我们需要为动态创建的对象显式调用析构函数delete this呢?
  3. 如果我们使用delete this;内部析构函数会发生什么?这是递归调用析构函数吗?
0 投票
3 回答
4132 浏览

javascript - ES6:静态方法中的 this

假设我有两个这样的 ES6 类:

然后我打了这样一个电话:

请注意,我正在通过子类调用在超类上定义的静态方法。

这不会我错误。它打印

所以this在静态方法中访问似乎在这里工作。

我需要一个用于超类的所有子类的通用静态方法,并且我需要能够知道哪个子类正在调用此方法。

现在我的问题是this在静态方法中使用是否合法。我知道这些静态方法成为类方法,因此this自然会指向调用它们的类对象。(类对象是构造函数。)

但我似乎找不到任何明确的资源表明 ES 规范允许这样做。

看起来像是对 ES6 类的一个很好的介绍,但没有谈论this.static

0 投票
2 回答
176 浏览

c++ - 从自身内部替换 std::function (通过移动分配到 *this?)

是否可以用另一个替换一个std::function从自身内部std::function

以下代码无法编译:

可以修改编译吗?
现在的错误消息是:没有为这个 lambda 函数捕获“this” ——我完全理解。但是,我不知道如何捕获func's this-pointer。我想,它甚至不是std::functionlambda 内部的,但是?!如何才能做到这一点?

背景:我想要实现的是:在给定的第一次调用中std::function,我想做一些初始化工作,然后用优化的函数替换原始函数。我想为我的功能的用户透明地实现这一点。

上述示例的预期输出为:

a
b
b

0 投票
4 回答
777 浏览

c++ - 带有这个指针的 memcpy 安全吗?

我目前正在用 C++ 编写自己的字符串实现。(只是为了锻炼)。

但是,我目前有这个复制构造函数:

我想提高一点性能。所以我想到了使用memcpy()只是复制obj*this.

就像这样:

覆盖这样的数据是否安全*this?或者这可能会产生任何问题?

提前致谢!

0 投票
1 回答
344 浏览

c++ - 带有此指针的模板类多重继承构造函数不起作用?

我有一个非常基本的代码牢记java。我做了一个对象和类类,但在模板中。

对象.hpp

对象.cpp

类.hpp

类.cpp

Uint_32.hpp

Uint_32.cpp

t1.cpp

编译命令:

现在终于没有编译错误了。我还有一个包含 operator.hpp 的文件,其中只包含每个运算符的模板定义。

输出 当我运行可执行文件时,我得到以下输出,我可能无法理解为什么?我尝试了所有可能的方法来知道。我还运行不同版本的不同系统。

这里发生了什么?为什么我的继承不能正确调用?我知道我不应该传递这个指针,因为它不安全,但我认为我别无选择。

我的问题

  1. Object<T>::Object(Class<T>& myReference)只被调用一次,但应该被调用三次。
  2. 在我看来,有四个对象创建它必须是 3 或 5(t1.cpp 中的 a 和 b 以及每个类中的 UNIEQUEID 初始化。
  3. 为什么这在构造函数调用中的 Class.cpp 文件中不起作用?
  4. 有什么方法可以检查我是否可以让 Object 类调用Object<T>::Object()构造函数以便 T = Object 类?