c++ - 具有不同值的指针成员变量

标签 c++ qt

好的,首先,这是我的代码:

HyperSprite::HyperSprite()
{
    _view = 0;
}

void HyperSprite::publish(QGraphicsView* view) {
    _view = view;
}

void HyperSprite::getKFrame() {
    if(_view != 0) {
        qDebug()<<(void*)_view;
    }
}

现在,如果我从 main() 中调用 HyperSprite::getKFrame(),我会得到输出:

0xbf8ffb84

我有一个 TCP 服务器,它需要这个 QGraphicsView* 变量。因此,无论何时建立新连接,都会调用 HyperSprite::getKFrame()。但是,每当我连接到我的服务器时,这就是输出:

0x1e425ff

老实说,我不明白这一点。成员的值(value)不应该始终保持不变吗?为什么指针值会改变?很明显,每当我尝试使用 _view 指针访问其任何成员时,都会发生段错误。我尝试使用 QSharedPointer,但它也会导致同样的问题。 QSharedPointer 的数据自动改变。为什么会这样?

最佳答案

“一个成员的值不应该始终保持不变吗?”不应该。如果它不是 const,并且如果它被分配给一个新值,它就会改变。

排除内存违规,可能有这些解决方案:

  1. 您处理另一个 HyperSprite 对象,因此它可能具有不同的 _view 成员。
  2. void publish(QGraphicsView* view) 在不同的 QGraphicsView 上被多次调用。或另一个修改 _view 值的函数成员...
  3. 您的 _view 是公开的,并且外部对象更改了它的值
  4. 一个对象被定义为你的对象的 friend 并且修改了_view的值

这种心情的东西......

关于c++ - 具有不同值的指针成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4578895/

相关文章:

qt - 模型数据未更改时刷新 View (Qt/PySide/PyQt)?

c++ -/lib64/libc.so.6标准解: version `GLIBC_2.14' not found

c++ - 字符串升序排列

c++ - sizeof 如何知道数组的大小?

c++ - 使用 OpenMP 并行化嵌套循环

c++ - OpenCL 缓冲区分配和映射最佳实践

c++ - Qt、tcp/ip通讯校验

c++ - GTK 应用程序 : How do I create a working indicator with Qt/C++?

model-view-controller - 如何让选择模型与代理模型一起使用?

windows - 如何从命令行构建一个qt项目?