C++ 如何访问指向另一个指向值的类指针的类指针
我正在从事一个在某些类之间具有高多线程的项目,因此我需要访问某个类中的值,并且我想使用指针来访问它,因此我所做的基本描述如下: 我有三门课: A.h 在A班C++ 如何访问指向另一个指向值的类指针的类指针,c++,pointers,indexoutofboundsexception,C++,Pointers,Indexoutofboundsexception,我正在从事一个在某些类之间具有高多线程的项目,因此我需要访问某个类中的值,并且我想使用指针来访问它,因此我所做的基本描述如下: 我有三门课: A.h 在A班 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
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);
}
}
当我运行程序时,我的输出不正确。我得到了一些等于零的值,还有一些是负值,所以我认为第二个指针指向了错误的内存位置?所以我的问题是如何正确地访问这个值。为了简单起见,我尝试编写与我的代码类似的代码,因为代码太大了
提前感谢您的帮助。在您发布的简化伪代码中,您正确地访问了
myvalue
属性,由于它在A
的构造函数中初始化为零,并且随后递增,因此它的值没有理由变为负值。这似乎是由于某些错误(隐藏在真实代码中)重写了myvalue
的值造成的
但更吸引我注意的是你有:
class C
{
public:
C() { bPtr = new B(); }
B* bPtr;
现在,如果C
实例中包含的B
实例的生存期与C
实例的生存期相关联,那么bPtr
按值聚合似乎是合理的,即,它是一个具有自动存储持续时间的对象,而不是一个指针:
class C
{
public:
C() { }
B b;
这将减少与使用这些裸指针相关的丑陋的内存管理。您的代码也不会那么容易出错
或者如果需要在多个对象之间共享<代码> b/COD>的实例,您也可以考虑设置一个约束,即“没有代码< C >代码>的实例如果没有<代码> b/COD>的实例就不可能存在(这也会导致类<代码> C <代码>将不负责<代码> b<代码>):
*mypytr1=…
错误;删除*
@krsteeve默认情况下,我的构造函数在cpp类中从项目文件中声明。我刚刚添加了一个新变量,需要以这种方式访问它。@DavidRTribble这是一个键入错误,我现在将对其进行编辑。很抱歉,您发布的代码根本无法编译。我们可以为您修复它,但不清楚这是否有助于您在实际代码中找到错误。你需要拿出一个来演示这个问题。@ ReDouSE,我想你需要考虑使用共享指针。否则,跟踪您的对象将是一件麻烦事。
class C
{
public:
C() { }
B b;
class C
{
public:
C(B& bRef) : b(bRef) { }
B& b;