1
1
假设复制构造函数中的所有内容
最有可能的是
但是,通过复制构造函数复制对象时,可能根本无法访问指向虚拟函数表的指针(除非要在复制构造函数中调用虚拟函数)。在这种情况下,所有数据都将成功复制到具有正确vtable指针的新对象。
自从
如果这是正在发生的,那么您需要找出覆盖您的
|
2
1
我觉得有点奇怪。 你说包含这一行的代码非常有效:
在这一行你表演
但你说过如果你想这么做
我不认为这两者都是真的(因为这意味着你已经成功地取消了空指针的引用)。我可以想到两个原因:
另外,确保您已验证r为空 之后 将执行设置其值的行。有些编译器初始化指向空的指针,但可能尚未设置。还要检查以确保您关闭了优化;有时调试器不能很好地处理优化,这会使一行代码在您认为已执行之后执行。 |
3
1
这些症状让你的Roiline对象听起来像是被删除了,留下一个悬空的指针来释放内存。当您试图调用一个虚拟函数时,它会崩溃,因为vtable已经被覆盖,但是当您使用复制构造函数创建一个副本时,它至少会从释放的对象中获得一些有效的数据,并且似乎可以工作。 |
4
0
我认为Roiline应该从ROI继承。 在Roiline中进行虚拟绘制,然后 roiline*r=v->roi(); r->draw();//调试显示r!= 0x0 应该工作… 连接到问题上(或者不连接到问题上),调用一个函数来返回与ROI构造函数完全相同的ROI是一个糟糕的实践。 (参考:roiline*roi()return//setter做一些控制工作…) 也许编译器会感到困惑… |
5
0
复制构造函数在引用时工作,要执行此操作,需要向它提供一个未引用(可能为空)的指针。这是语言中有趣的事情之一,因为引用引用的指针实际上不会引用指针,直到使用引用(C++实际上是多个范例,它甚至是懒惰的!)。因为这是未定义的行为,所以复制构造函数完全可以工作。在视图中,您可能以某种方式使指针无效。
|
Community wiki · safe_ptr实现 1 年前 |
lplplplp · 为什么不能访问函数外的结构指针 2 年前 |
Fabio · 在c中将指针赋给常数指针++ 2 年前 |
Gabe Tucker · 无法在golang中分配接口对象指针 2 年前 |