我遇到了以下问题。我有一些课程:
class classA
{
public:
std::vector< classB > elementsOfBClass;
}
classA::classA()
{
int a = 1;
int b[2] = {2,3};
elementsOfBClass.pushBack(classB(a,b));
}
class classB
{
public:
int a;
int* b;
classB(int a, int* b);
};
classB::classB(int aVal, int* bVal)
{
a = aVal;
b = bVal;
LOG("%d",a); // a=1
LOG("%d,%d",b[0],b[1]); //b[0] = 2 , b[1] = 3
//If I output b[0] and b[1] here then it's ok
}
我也有一些使用这个类的代码:
classA classAObject = classA();
LOG("%d", classAObject.elementsOfClassB[0].a); // a=1
LOG("%d,%d",classAObject.elementsOfClassB[0].b[0],classAObject.elementsOfClassB[0].b[1]); //Here is some strange issue. b[0] and b[1] is always some absolutely random values!
b [0]和b [1]是一些奇怪的值。你能帮我理解为什么吗?
谢谢!
答案 0 :(得分:3)
你的classB :: b成员不会复制b,只需要一个指向堆栈上分配的变量的指针。当ClassA contructr退出时,这会被覆盖。
你的classB应该拥有一个声明为b [2]的成员广告制作int *bVal
的深层副本
答案 1 :(得分:0)
如果你有选择,可以使用智能指针和std :: container,例如std :: array(如果在编译时已知大小,需要C ++ 11)或std :: vector。它会让你免于头痛。