在方法激活时具有两个不同实例的对象
Object having two different instances at method activation
标题不是那么清楚,如果有人有更好的建议,请告诉我。现在进入正题:我正在激活一个类的方法。
m_someObject.Clear();
问题是,当我在调用之前查看m_someObject
的地址时,我得到它位于某个地址中,当我使用调试器输入 Clear
方法时,我得到this
变量位于另一个地址。结果是从该方法返回后Clear
似乎没有影响
m_someObject
调用它的实例。有没有人知道是什么会导致这种行为?在 Microsoft Visual Studio 2010 64 位上工作。
可能你m_someObject
作为值传递给其他函数(从而获得副本)并仅在副本上执行Clear()
。这样,您就不会注意到原始对象的变化。
你能检查一下你是否有两个同名的不同变量吗?一个在直接范围内定义,另一个,也许在全局范围内定义?
最常见的原因是多重继承。与 C# 和 Java 不同,C++一个类可以有多个基类。显然,并非所有都可以位于偏移量 0 处。这意味着,如果使用位于非零偏移量的基类中的方法,则必须调整this
。
好吧,显然调试器在撒谎。我不知道这一点,但显然一些代码是在发布模式下编译的。结论 - 调试器否,printf - 是。
相关文章:
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- C++两个源文件之间共享的枚举的静态实例
- 堆栈分配的类类型.为什么两个 ID 实例的地址相同?
- 比较两个 std::chrono::time_point 实例时出错
- 在两个类实例之间共享向量
- 编译时检查是否有两个具有相同模板参数的模板实例化
- 使用模板检查我的类的两个实例是否相等
- 随机洗牌似乎会产生相同的结果,但仅在前两个实例中产生相同的结果.我如何避免这种情况
- 运算符*=来自两个实例(矩阵),结果不好
- 如何超载分配运算符,该操作员总计两个实例变量
- 如何使用两个实例中的值进行计算
- 如何检查我的类的两个实例是否相等
- 访问两个实例
- 类 COpenGLControl 的两个实例之间的动态数据交换
- 如何用不同的静态值启动同一个应用程序的两个实例
- Boost asio和线程,如果我运行两个实例,我得到cpu在100%
- 如何消除具有相同模板参数名称的模板类的两个实例的歧义
- c++对象正在创建同一数组的两个实例,但作用域不同
- c++在child的两个实例之间共享parent属性
- 在两个不同的输入数据集上运行同一个C/ c++程序的两个实例