Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 范围界定操作员是否会改变封面下的内容?_C++_Virtual Functions - Fatal编程技术网

C++ 范围界定操作员是否会改变封面下的内容?

C++ 范围界定操作员是否会改变封面下的内容?,c++,virtual-functions,C++,Virtual Functions,我这里有一个情况——基本上: #include <iostream> class A { public: virtual void foo()=0; }; class B : A { public: void foo() { cout << "I hate this code." << endl; } void DoSomething() { /* Code */ } }; 它工作得很好 如

我这里有一个情况——基本上:

#include <iostream>

class A {
    public:
        virtual void foo()=0;
};

class B : A {
    public:
        void foo() { cout << "I hate this code." << endl; }
        void DoSomething() { /* Code */ }
};
它工作得很好

如果我这样称呼它:

B::foo()
foo()
它在运行时挂起系统。当函数不是静态的或类似的东西时,为什么作用域操作符会改变结果


PS:我当时就写了那段代码,但没有编译器来回答这个问题,所以如果有拼写错误,我很抱歉。

代码看起来是正确的。这强烈意味着vptr或vtable已被某些越界内存访问损坏,或者
指针无效


作用域运算符通过允许调用完全绕过虚拟函数查找来更改调用。

代码看起来正确。这强烈意味着vptr或vtable已被某些越界内存访问损坏,或者
指针无效


作用域运算符通过允许调用完全绕过虚拟函数查找来更改调用。

哇,它挂起了整个系统?发布的代码无法重现该问题。发布能够重现问题的最小代码。你真正的代码将非常重要。也许您是从一个更派生的类调用
DoSomething
,其中
foo
再次被重写(并挂起)。这非常奇怪。首先,我要确保你做了一个干净的构建。如果问题仍然存在,您应该逐步进行反汇编,看看实际的区别是什么。如果您不显示代码,那么您如何期待帮助?哇,它挂起了整个系统?发布的代码无法重现该问题。发布能够重现问题的最小代码。你真正的代码将非常重要。也许您是从一个更派生的类调用
DoSomething
,其中
foo
再次被重写(并挂起)。这非常奇怪。首先,我要确保你做了一个干净的构建。如果问题仍然存在,您应该分步进行反汇编,看看实际的区别是什么。如果您不显示代码,那么您如何期待帮助?谢谢,这是完全可能的,因为我们有大量的进程和大量的动态内存使用。也许我们运行了一个数组,这正是显示效果的地方。谢谢,这是完全可能的,因为我们有大量的进程和大量的动态内存使用。也许我们超过了一个数组,这正是显示效果的地方。