我的班级有这个成员.
std::vector<AvaWrapper> m_controls;
Run Code Online (Sandbox Code Playgroud)
在我的构造函数中,我打电话
m_controls.clear()
Run Code Online (Sandbox Code Playgroud)
然后我调用一个成员函数再次执行m_controls.clear(),但它会断言一个断言.调试器显示m_controls有50万或更多条目,但它们都不是有效的,因为当我展开树时调试器显示"错误:表达式无法评估".所以,我的直觉是这个类没有正确创建,因为这个代码确实有效,但后来我从这个类派生了一个类,我调用new()来创建父类.它作为基类的新角色正在爆发.但是这个指针显示所有其他成员变量都有有效数据,所以我的预感是错误的.构造函数也被调用了.有任何想法吗?谢谢.
UPDATE2:
Train::Train() : SpriteWindowFrame(200)
{
s_mutexProtectingTheGlobalData = new wxMutex();
m_window_rect = NULL;
m_thread = NULL;
m_ok = false;
m_accumulate_timer = new wxTimer();
m_accumulate_timer->SetOwner(this, ACCUMULATE_TIMER_ID);
m_autohide_timer = new wxTimer();
m_autohide_timer->SetOwner(this, AUTOHIDE_TIMER_ID);
m_autohide = false;
m_autohide_period = 5000;
m_controls.clear();
}
Run Code Online (Sandbox Code Playgroud)
更新:
//This version works.
SpaceInit::SpaceInit()
{
//Use INI config store. If you need something else, just
//create the appropriate object.
m_config_store = new IniConfigStore();
//Start up config.
Init();
m_t = new Trains();
return;
}
SpaceInit::~SpaceInit()
{
wxDELETE(m_config_store);
return;
}
Run Code Online (Sandbox Code Playgroud)
我可以这样做:m_t-> SomeMemberFunctionThatManipulatesVector()
它的工作原理.
这个没有
SpaceInit::SpaceInit():Trains()
{
//Use INI config store. If you need something else, just
//create the appropriate object.
m_config_store = new IniConfigStore();
//Start up config.
Init();
return;
}
Run Code Online (Sandbox Code Playgroud)
我做不到:SomeMemberFunctionThatManipulatesVector()
在向量上炸毁.
我刚刚注意到这个指针确实在Train()默认的consturctor中搞砸了.我认为不是,但确实如此.Trains构造函数运行但是一切都被删除了.
My Trains构造函数代码由工厂运行.只是初始化事物,新事物等等.SpaceInit是用SpaceInit创建的*t = new SpaceInit(); 火车是一个派生类,所以也许它与它有关?
这句话有问题:
我后来从这个类派生了一个类,我调用new()来创建父类.
从类派生时,不要调用new()来创建父类.在运行子构造函数的第一行之前,已经调用了父构造函数.
我怀疑你的问题可能就在这个地区.也许您可以向我们展示发生这种情况的代码.