【发布时间】:2011-06-29 01:16:11
【问题描述】:
我继承了类似于此代码的内容:
class Base
{
public:
virtual double getElement(int i) {return NULL;}
virtual Derived* GetAsDerived() {return this;}
};
class Derived : public Base
{
public:
virtual double getElement(int i) {return vec[i];}
private:
std::vector<double>;
};
还有一个函数如下:
void f(Base& b)
{
Derived* d = b.GetAsDerived();
}
程序流程是这样的
Derived A;
/* get data into vector in A */
f(A);
在f 中调用GetAsDerived() 之后。d 指向的对象中的向量包含垃圾。在调试器内部,我可以返回调用堆栈,看到A 内部的向量仍然有有效数据。
我确信所有这些奇怪的向上转换 - 向下转换是原因,但我无法在规范或在线找到正式的解释。
那么为什么它会以这种方式失败呢?
【问题讨论】:
-
这段代码甚至无法编译。请贴出真实的,编译代码。
-
我不能发布实际代码,它跨越了几个文件,这段代码只是为了注释问题
-
是的,这没有任何意义 - 基类似乎没有 GetAsderived 函数,因此代码不适用于初学者。 GEtAsDerived 似乎也没有返回指针,所以这也不起作用。
-
@Eli:然后发布一些可以编译并演示您遇到的问题的代码。这个
GetAsDerived()不会编译,因为它试图返回this,它是Base*,而不是Derived*。 -
您的固定示例仍然是错误的。
标签: c++ inheritance casting