如何访问指向指向值的类的另一个指针的类的指针

时间:2013-09-04 16:26:58

标签: c++ pointers indexoutofboundsexception

我正在处理某些类之间具有高多线程的项目,所以我需要访问某个类中的值,我想使用指针来访问它,所以我的工作基本上如下所述:

我有3节课: A.h

class A{
public: int myvalue;
}

在A.cpp类

class A{
A::A(){
myvalue=0;
}

function(){
myvalue++;
  }
}

现在我想在名为B的中间类中访问此值,因为我可以直接访问它。在班级B.h

class B{
public: A *myptr1;
}

在班级B.cpp

class B{
  B::B(){
  myptr1 = new A();
  }

  Function (){
  printf("My value is = %d \n",myptrt1->myvalue);
  }
}

当我运行程序时,我的输出是正确的,它等于5.但是,我还需要在第三个类中访问这个值,所以我使用另一个指针来访问它。

我们称之为第三类C,所以在课堂上C.h

class C {
public: B *myptr2;
}

在班级C.cpp

class C{
  C::C(){
  myptr2 = new B();
  }

  Function (){
  printf("My value is = %d \n",myptr2->myptrt1->myvalue);
  }
}

当我运行程序时,我的输出不正确。我得到一些等于零的值,其他值是负值,所以我认为第二个指针指向错误的内存位置?所以我的问题是如何正确访问这个值。为了简单起见,我尝试编写类似于我的代码的代码,因为代码太大了。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

在您发布的简化伪代码中,您正在正确访问myvalue属性,因为它在A的构造函数中为零初始化并且之后递增,所以没有理由它的价值应该变成负数。这似乎是由一些重写myvalue值的错误(隐藏在您的真实代码中)引起的。

但更让我注意的是你有:

class C
{
public:
C() { bPtr = new B(); }
B* bPtr;

现在,如果B实例中包含的C实例的生命周期与该C实例的生命周期相关联,那么bPtr似乎是合理的}按值汇总〜>即成为具有自动存储持续时间而不是指针的对象:

class C
{
public:
C() { }
B b;

这将减少与使用像这样的裸指针相关的丑陋内存管理。您的代码也不会出错。

或者如果您需要在更多对象之间共享此B实例,您可能还会考虑设置一个约束,即C的实例在没有{的实例的情况下不能存在{1}}“(这也会导致该类B不对C}的存在负责:

b