c++ - 指针容器问题

标签 c++ templates pointers stl exc-bad-access

我有课A , B , C , D以及以下层次结构:

class A {
    B* b;
};

class B {
    C<D>* c;
};

template <class T>
class C<T> {
    list<T*> ds;
};

class D {
};

我分配A首先作为 A*基类中的成员,使用 new A() .内 A我分配b使用 new B() .内 B我分配c使用 new C<D>() .

一旦我尝试调用 ds.size()程序崩溃。一个EXC_BAD_ACCESS出现在内部 ds当它试图调用其 begin()size() 内的方法.

你知道为什么会这样吗?我已经使用 C++ 几年了,但这是我第一次尝试在标准容器中使用指针,所以我可能遗漏了一些明显的东西。

最佳答案

据我所知,您的代码不应该以某种方式关心列表 ds 的内容。当您将元素插入容器和类似的东西时,您需要确保您的元素类型支持所有必要的功能(即它的可分配、可复制,并且在其中具有正确的功能,具体取决于该容器类成员中所需的功能)。

虽然 .size 函数应该只返回一个内部成员的值,但崩溃的东西并没有多大意义。您确定所有内容都已在您的真实代码中正确分配了吗?在我看来,您只是在调用链中的某处有一个未初始化的指针。

关于c++ - 指针容器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7300245/

相关文章:

c++ - GCC C++ (ARM) 和指向结构字段的常量指针

c++ - 定义模板结构的特征时出现不完整的类型错误

c++ - 为什么我无法在 for 循环中访问动态分配的内存?

c++ - 编译器如何确定位域结构的大小?

c++ - 运算符 = 在 C++ 中的虚拟继承中重载

c++ - C 套接字发送/接收缓冲区类型

C++11 std::tuple 到 std::array 转换导致可变参数模板崩溃

C++。编译错误。我正在尝试使用枚举模板参数添加 friend 模板函数

c++ - 指向数组指针的双星指针;如何访问数组的指针? C++

c++ - 在 C++ 中将字符数组添加到 const string&