c++ - 同一类不同方法中指针的 vector

标签 c++ pointers vector

我需要一个可以存储继承自 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/

相关文章:

c++ - push_back()文件系统::path的.string()。data()的怪异行为导致生成 “vector<const char *>”

c++ - 根据某些特定规则对文本进行标记。 C++中的算法

c++ - 使用 std::begin()、std::end() 将 ArrayXd 转换为 STL vector ,

c++ - 有人可以帮助这个程序中的错误吗?

c++ - 如果 ptr 是指向静态数组第一个元素的 ptr,编译器将如何评估++*ptr++?

c++ - vector 中 pair 元素的数据类型是什么?

c++ - std::string 不是 std::vector<char> 吗?

c++ - 正确扩展 COM 接口(interface) (IDL)

c++ - 使用C++搜索字符串的出现

c - 每次运行此代码时,我都会取消对不完整类型的引用