调用类函数后类成员为null



我有一个程序,里面有很多类-MenuRequestHandlerLoginRequestHandlerRequestHandlerFactory等。在我的一个类中,我创建了一个LoginRequestHandler*对象和一个MenuRequestHandler*对象来使用它们的函数-它们都继承了IRequestHandler的2个函数。

问题是,当我创建MenuRequestHandler*对象时,对象的成员是好的,但在程序进入对象函数后,调试器中的成员值是"0";无法读取内存";。

MenuRequestHandler* menu = m_handlerFactory.createMenuRequestHandler(username);
menu->test();
if (menu->isRequestRelevant(info)) -> this is the function where the object members stop functioning
{ //unrelated code}

菜单请求处理程序.h:

#pragma once
#ifndef MENUREQUESTHANDLER_H_
#define MENUREQUESTHANDLER_H_
class RequestHandlerFactory;
class IRequestHandler;
class StatisticsManager;
#include "RequestHandlerFactory.h"
#include "LoggedUser.h"
#include "RoomManager.h"
#include <sstream>
#include "IRequestHandler.h"
#include "StatisticsManager.h"
#include "RequestInfo.h"
class MenuRequestHandler : public IRequestHandler {
private:
LoggedUser m_user;
RoomManager& m_roomManager;
StatisticsManager& m_statisticsManager;
RequestHandlerFactory& m_handlerFactory;
std::string booltostring(bool b);
//A bunch of functions
public:
MenuRequestHandler(RoomManager roomManager, StatisticsManager statisticsManager, RequestHandlerFactory handlerFactory, std::string username);
virtual bool isRequestRelevant(RequestInfo requst);
virtual RequestResult handleRequest(RequestInfo requst);
void test();
};
#endif    

需要指出的是,以相同方式使用LoginRequestHandler*时不会出现此问题。我想我可能在createMenuRequestHandler()函数中搞砸了一些东西,但它实际上与RequestHandlerFactory.cpp:中的LoginRequestHandler()等价物相同

MenuRequestHandler* RequestHandlerFactory::createMenuRequestHandler(std::string username) {
RoomManager& rManager = m_roomManager;
StatisticsManager& statManager = m_statisticsManager;
RequestHandlerFactory& rHandlerFactory = *this;
std::string newstr = username;
MenuRequestHandler* handler = new MenuRequestHandler(rManager, statManager, rHandlerFactory, newstr);
return handler;
}
LoginRequestHandler* RequestHandlerFactory::createLoginRequestHandler() {
LoginManager& manager = m_loginManager;
RequestHandlerFactory& rHandlerFactory = *this;
LoginRequestHandler* loginRequestHandler = new LoginRequestHandler(manager, rHandlerFactory);
return loginRequestHandler;
}

很明显,当对象成员本身是引用时,MenuRequestHandler的构造函数没有接收作为参数的引用,因此引用中的参数值被销毁。我住的地方现在是凌晨3:45,我终于可以睡觉了,感谢所有有用的评论:(

最新更新