General knowledge question regarding classes and class instances in C++
I'll start with my problem:
My problem is that I'm getting a segmentation fault when I try to access a public
function within an instance within a class.
Suppose I have a class A
that has a bunch of class instances in it like so:
class A {
...
public:
class B *B;
class C *C;
};
Let's consider class A
to be our "global" class; that is, class A
is sent to every class that I initialize and own. Therefore, every class function can call functions from class A
through A->function()
. Furthermore, assuming other instances have been initialized, every class can call functions of instances belonging to A
, like so: A->B->function()
. Up to now, everything worked great. My problem is that I'm suddenly getting a segfault when trying to access a function of one of the instances belonging to A
. What I think the reason is (and why I am asking this question, because I am unsure), is that the class instance A
is sent to class C
before instance B
has been initialized. Then in class C
, I simply create a pointer copy (meaning my class C
has a private instance of A
called class A *A
). So then when I first create an instance of class C
, I send it class A
and all of it's public members, which C
's constructor then makes the local copy of A
.
Phew. That was difficult to do without presenting code. So here's the question; say one of my class A
functions contains:
C *c = new C(this);
and the constructor for C
has this:
C(A *a_val) { a = a_val; }
while also containing a private instance-pointer class A *a;
then another function in A
instantiates the B
class. Would my C
class be able to use that开发者_如何学运维 B
class? And if not (which is why I think I'm segfaulting), how could I possibly solve this issue?
Thanks!
In general your code will segfault if you dereference a pointer to an unitialized variable. From your description, this sounds like what is happening, although it's hard to tell given the lack of an example that fails.
another function in A instantiates the B class. Would my C class be able to use that B class?
Yes. This should work provided you instantianted correctly and passed the pointer to B correctly to C. Also note that it would help to get the terminology a bit more correct in the above question:
another function in A instantiates an object of the the B class. Would my C object be able to use that B object?
I believe the above is what your question really meant to say.
精彩评论