问题标签 [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.
c++ - C++ 将此类指针分配给 unique_ptr 或 shared_ptr
我有一个要从其继承的基类,在可以声明其任何派生类之前,必须首先声明基类的至少 1 个实例。我正在考虑this pointer
将基类的 存储到其自己的 unique_ptr 成员变量中,而不是使用static_ptr
. 此外,基类将跟踪其派生类的所有实例,直到声明另一个基类。这是我的类声明的样子:
所有派生类型都将从该基础公开继承,例如:
我在我的主要使用这个类层次结构的想法如下
我确实知道如何使用静态函数创建一个静态指针,以从类中获取 this 指针,以便在应用程序运行时只有一个实例。我只是想知道是否可以使用 shared_ptr 或 unique_ptr ,并且在成功创建至少一个基本类型的实例之后,然后将(this)指针保存到任一类型的智能指针中?我更喜欢做一个独特的父类“拥有”它自己的指针。
如果您需要更多信息,请告诉我,我会根据要求更新此问题,例如显示我的基类构造函数的定义。
c++ - 继承自 std::enable_shared_from_this 的自身的自包含 shared_ptr
这个问题是这个问题的后续问题:原始问题
我有一个继承自的类,std::enable_shared_from_this
该类包含一个std::shared_ptr<Self>
在我知道该类的详细信息完整且成功之后,在此类的任何构造函数中,如何将存储的内容分配std::shared_ptr<Self>
为shared this
?
例子:
c++ - 为什么有必要将“this”指针作为“arg”参数传递给 pthread_create
我的环境是 C++ for Linux-Xenomai on ARM gnueabi。成功生成新的 pthread 后,我发现类实例超出了线程的范围。从线程访问类实例对象、变量、结构等会返回任意值,并且通常会返回“分段错误”。
在花费了数天的繁重时间在网上寻找解决方案之后,我猜测并尝试使用“this”指针作为 pthread_create 的参数。瞧!类实例对线程可见。问题是为什么?
c++ - 我遇到了一些 C++ 代码。为什么我们必须在块中使用 *this 而不是 this?
我有以下代码,我想知道为什么它使用*this
而不是this
.
c++ - 在 C++ 中返回“This”对象的函数
因此,以下是在类外定义的类 Sales_data 的成员函数,
当函数被调用时,它被称为
我不理解的是函数返回*this
,我知道它返回对象的一个实例,但它没有将该实例返回给我们在函数调用期间可以看到的任何东西,如果我不编写返回语句,它会工作吗有什么不同。
有人请详细解释,因为我只是不明白。
c++ - 为什么在取消引用/释放动态创建的对象之后,它仍然在 C++ 中被引用?
- 调用对象的析构函数后,它仍然像在内存中一样引用吗?为什么?
- 为什么我们需要为动态创建的对象显式调用析构函数
delete this
呢? - 如果我们使用
delete this;
内部析构函数会发生什么?这是递归调用析构函数吗?
javascript - ES6:静态方法中的 this
假设我有两个这样的 ES6 类:
然后我打了这样一个电话:
请注意,我正在通过子类调用在超类上定义的静态方法。
这不会给我错误。它打印
所以this
在静态方法中访问似乎在这里工作。
我需要一个用于超类的所有子类的通用静态方法,并且我需要能够知道哪个子类正在调用此方法。
现在我的问题是this
在静态方法中使用是否合法。我知道这些静态方法成为类方法,因此this
自然会指向调用它们的类对象。(类对象是构造函数。)
但我似乎找不到任何明确的资源表明 ES 规范允许这样做。
这看起来像是对 ES6 类的一个很好的介绍,但没有谈论this
.static
c++ - 从自身内部替换 std::function (通过移动分配到 *this?)
是否可以用另一个替换一个std::function
从自身内部std::function
?
以下代码无法编译:
可以修改编译吗?
现在的错误消息是:没有为这个 lambda 函数捕获“this” ——我完全理解。但是,我不知道如何捕获func
's this
-pointer。我想,它甚至不是std::function
lambda 内部的,但是?!如何才能做到这一点?
背景:我想要实现的是:在给定的第一次调用中std::function
,我想做一些初始化工作,然后用优化的函数替换原始函数。我想为我的功能的用户透明地实现这一点。
上述示例的预期输出为:
a
b
b
c++ - 带有这个指针的 memcpy 安全吗?
我目前正在用 C++ 编写自己的字符串实现。(只是为了锻炼)。
但是,我目前有这个复制构造函数:
我想提高一点性能。所以我想到了使用memcpy()
只是复制obj
到*this
.
就像这样:
覆盖这样的数据是否安全*this
?或者这可能会产生任何问题?
提前致谢!
c++ - 带有此指针的模板类多重继承构造函数不起作用?
我有一个非常基本的代码牢记java。我做了一个对象和类类,但在模板中。
对象.hpp
对象.cpp
类.hpp
类.cpp
Uint_32.hpp
Uint_32.cpp
t1.cpp
编译命令:
现在终于没有编译错误了。我还有一个包含 operator.hpp 的文件,其中只包含每个运算符的模板定义。
输出 当我运行可执行文件时,我得到以下输出,我可能无法理解为什么?我尝试了所有可能的方法来知道。我还运行不同版本的不同系统。
这里发生了什么?为什么我的继承不能正确调用?我知道我不应该传递这个指针,因为它不安全,但我认为我别无选择。
我的问题
Object<T>::Object(Class<T>& myReference)
只被调用一次,但应该被调用三次。- 在我看来,有四个对象创建它必须是 3 或 5(t1.cpp 中的 a 和 b 以及每个类中的 UNIEQUEID 初始化。
- 为什么这在构造函数调用中的 Class.cpp 文件中不起作用?
- 有什么方法可以检查我是否可以让 Object 类调用
Object<T>::Object()
构造函数以便 T = Object 类?