对象指针行为奇怪

时间:2013-11-07 13:31:04

标签: c++ visual-c++ pointers

我在SessionMenu.h中定义了一个SessionMenu指针的静态向量,如下所示:

static vector<SessionMenu *> sessionMenus;

我在SessionMenu类中定义了一个accountType枚举,并在SessionMenu类的构造函数中初始化了该变量。

在我的应用程序的入口点,我向这个向量添加了三个对象,如下所示:

SessionMenu::sessionMenus.push_back(&StudentSessionMenu());
SessionMenu::sessionMenus.push_back(&TutorSessionMenu());
SessionMenu::sessionMenus.push_back(&AdministratorSessionMenu());

此时,当我在此时调试SessionMenu :: sessionMenus时,指针是有效的,而accountType变量的值是预期的。

然而,稍后在我的应用程序中,当我迭代向量时,我的指针如此:

for (vector<SessionMenu *>::iterator menuIterator = sessionMenus.begin();
    menuIterator != sessionMenus.end(); ++menuIterator) {
        SessionMenu *currentMenu = *menuIterator;
        if(currentMenu->getAccountType() == accountType)
            return currentMenu;
}

return NULL;

指针似乎指向不同的地方。

任何可能导致此问题的想法?

干杯。

1 个答案:

答案 0 :(得分:0)

StudentSessionMenu()是暂时的。指针似乎只是有效,但它们不是。当你检查它们时,记忆已经消失了。你不再拥有它。

奇怪的是,在尝试获取变量的地址时,您至少没有得到警告。 您的警告是否已打开?你是在忽视它们吗?

动态分配对象(SessionMenu::sessionMenus.push_back(new StudentSessionMenu());)或使用智能指针向量。