我需要一个可以存储继承自 A
的类 (B
) 的 vector 。该 vector 位于一个类中,该类管理应用程序的所有流程并包含 vector Test
。
A级
class A {
public:
virtual void test() {
cout << "Class A" << endl;
}
};
B级
class B : public A {
public:
virtual void test() {
cout << "Class B" << endl;
}
};
测试类
class Test {
private:
vector<A*> v;
public:
void input() {
A a;
B b;
A *a2 = &b;
for (int i = 0; i < 10; i++) {
if (i%2 > 0) {
v.push_back(&a);
} else {
v.push_back(a2);
}
}
}
void output() {
for (unsigned int i = 0; i < v.size(); i++) {
v[i]->test();
}
}
};
主要
int main () {
Test t;
t.input();
t.output();
return 0;
}
此程序将类 B A B A B A B A B A 添加到 vector 中,并根据类是什么输出“A 类”或“B 类”。
如果我将 output()
的代码放在 input()
方法中,程序可以正常运行。但就像这里一样,程序编译没有问题,但在执行时会出现访问冲突错误。
这是一个更大问题的简化。我不希望将 output()
方法的所有代码都放在 input()
方法中。
据我所知,从一个方法到另一个方法, vector 的指针已损坏并且指向不正确。为什么?
最佳答案
您正在操作在 input
方法中在堆栈上创建的对象,这些对象在方法返回后被销毁。
即使您将这些对象的地址存储在 vector 中并尝试在 output
方法中访问它们,您的程序也会崩溃,因为这些对象已不存在。
而是在 main
中创建对象或在堆上动态创建它们。
关于c++ - 同一类不同方法中指针的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20845174/