当我尝试访问由虚函数返回的静态变量时,我的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,但是有不同的类型 - 这可能是个问题吗?
请帮帮我,谢谢。