当访问虚函数返回静态变量

时间:2015-09-25 10:12:22

标签: c++ static crash virtual

当我尝试访问由虚函数返回的静态变量时,我的Visual C ++程序(VC11)出现崩溃问题。

<。>在.h文件中:(跳过详细信息)

class BaseAggregateFunction 
{
  public:
    static const ClassHandle handle;
    virtual const ClassHandle& GetClassHandle() const { return handle; }
};
class RowAggregateFunction : public BaseAggregateFunction
{
  public:
    static const ClassHandle handle;
    virtual const ClassHandle& GetClassHandle() const { return handle; }
};
class RowSum : public RowAggregateFunction
{
  public:
    static const ClassHandle handle;
    virtual const ClassHandle& GetClassHandle() const { return handle; }
};

(有很多类似的课程)

并在.c文件中初始化静态成员

const ClassHandle BaseAggregateFunction::handle("BaseAggregateFunction");
const ClassHandle RowAggregateFunction::handle("RowAggregateFunction", BaseAggregateFunction::handle);
const ClassHandle RowSum::handle("RowSum", RowAggregateFunction::handle);

现在有新案例

BaseAggregateFunction& f = new RowSum(...);
const ClassHandle& h = f.GetClassHandle();
Logger::Instance() << LogHeader << MsgClass(MsgClass::Information)
  << "Function is a " << h.Name() << EndMsg;

在崩溃转储文件中,我看到h地址是0x000005,当然这是无法访问的!虚拟类如何返回无效变量?假设是静态的!可能是这样的?我该如何解决?

顺便说一下,这个程序有一天会运行相同的逻辑数千次,它会在当天中途崩溃。

我添加了跟踪日志,并且多次创建和删除f。这个是正常的。当问题发生时,相同的内存地址是新的&f到d,但是有不同的类型 - 这可能是个问题吗?

请帮帮我,谢谢。

0 个答案:

没有答案