【问题标题】:'this' pointer changes after calling a member function'this' 指针在调用成员函数后发生变化
【发布时间】:2014-10-03 01:57:47
【问题描述】:

我使用 Visual Studio 2012 Express 调试 64 位应用程序。假设 'foo' 和 'bar' 都是 C 类的一些成员函数。

'foo' 看起来像:

void foo() {
    bar();    // change to this->bar() works!
}

我的程序崩溃了,因为 'this' 指针在进入 'bar' 时发生了变化。该问题可以通过更改为 'this->bar()' 来解决。

知道我应该如何调试这个问题吗?谢谢

【问题讨论】:

  • 你是什么意思'这个指针被改变'?您的意思是它不再指向包含 foo 的类的实例吗?还是其他实例?
  • 请发布一个最小但完整的示例

标签: c++ visual-studio-2012


【解决方案1】:

你的意思是下面的代码有效吗?

void foo() {
    this->bar();    // instead of bar()
}

所以,假设 foo() 是一个成员函数,它为同一个对象调用另一个成员函数 bar(),检查两件事:(1) 是否存在另一个具有相同成员函数签名的非成员函数 bar() bar(),如果存在,更改非成员函数名 op 始终使用 this-> 限定成员函数调用作为一种良好的编程习惯 (2) 当您为某些对象实例或指向对象实例的指针调用 foo() 时,检查对象是否已正确分配和初始化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    相关资源
    最近更新 更多