我有课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/