C++ 通过成员访问表达式调用虚拟函数
我是按照以下规则来的C++ 通过成员访问表达式调用虚拟函数,c++,base-class,C++,Base Class,我是按照以下规则来的N4296::12.7/4[class.cdtor]: 如果虚拟函数调用使用显式类成员访问 (5.2.5)且对象表达式指x的完整对象 或该对象的一个基类子对象,但不是x或其子对象之一 基类子对象,行为未定义 这是什么意思?你不能举例说明一下吗?这对我来说有点难以想象。若你们还想知道,这指的是当你们在基类的析构函数中,你们指的是整个对象中已经被破坏的东西。例如: struct Derived; struct Base { Derived &der; B
N4296::12.7/4[class.cdtor]
:
如果虚拟函数调用使用显式类成员访问
(5.2.5)且对象表达式指x的完整对象
或该对象的一个基类子对象,但不是x或其子对象之一
基类子对象,行为未定义
这是什么意思?你不能举例说明一下吗?这对我来说有点难以想象。若你们还想知道,这指的是当你们在基类的析构函数中,你们指的是整个对象中已经被破坏的东西。例如:
struct Derived;
struct Base {
Derived &der;
Base(Derived &d): der(d) {}
~Base();
};
struct Derived: Base {
int value;
Derived(): Base(*this) {}
};
#include <iostream>
Base::~Base() {
std::cout <<
der.value // this is the undefined behavior! der.value is *gone*
<< std::endl;
}
struct派生;
结构基{
导出&der;
基(派生&d):der(d){}
~Base();
};
派生结构:基{
int值;
派生():基(*this){}
};
#包括
Base::~Base(){
std::这句话后面难道没有一个例子吗?事实上,你十个月前没有问过吗?@t.C.其实忘了这件事。我想知道你是怎么记得的。。。