gpt4 book ai didi

c++ - 列表插入迭代器超出范围 (C++)

转载 作者:太空宇宙 更新时间:2023-11-04 14:41:19 26 4
gpt4 key购买 nike

我有一个类 A 可以响应 doSomething() 和一些子类 BCD 全部覆盖 doSomething()B 特别有一个实例变量,它是标准库中的列表,并在响应 doSomething() 时向该列表添加元素。

在我的代码的某些部分,我创建了一个数组,其中包含指向 A 类型对象的指针。现在,如果我这样声明:

A* pointersToA[3];
pointersToA[0] = &B();
pointersToA[1] = &C();
pointersToA[2] = &D();

调用 pointersToA[0]->doSomething() 时,我得到一个 List insert iterator outside range

但是如果我这样做的话:

A* pointersToA[3];
B b = B();
pointersToA[0] = &b;
pointersToA[1] = &C();
pointersToA[2] = &D();

一切都按预期进行。

为什么会这样?

最佳答案

获取右值的地址几乎肯定迟早会导致问题(通常更早),并且在 C++ 中实际上是非法的(因此您的编译器在这方面并不是一流的)。地址不是对对象的引用;因为 C++ 不是一种垃圾收集语言,BCD 的值在使用它们的语句消失后立即消失执行。

对于您的使用,动态分配听起来像是最直接的方式:

std::array<std::unique_ptr<A>, 3> pointersToA {
std::make_unique<B>(),
std::make_unique<C>(),
std::make_unique<D>()
};

关于c++ - 列表插入迭代器超出范围 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28110811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com