My questions is, suppose we have two classes A and B. I want to have an object of B in class A.
Should I use,
class A
{
public:
A();
~A();
B* b;
};
or
class A
{
public:
A();
~A();
B b;
};
As far as I know, in the first scenario, I can initialize the object *b
using new
operator and for the second scenario, I can initialize b
using an initialization list if I don't want to use the default constructor of class B
. Which is more convenient to use?
Pointers to members allow you to refer to nonstatic members of class objects. You cannot use a pointer to member to point to a static class member because the address of a static member is not associated with any particular object. To point to a static class member, you must use a normal pointer.
Non-pointers are objects that, well, hold the actual type. int i; is a single integer. char name is a single character and so on. Pointers are objects that contains addresses to other objects. when you define "struct foo x;" then x will be an object of type struct foo.
Pointers are used for file handling. Pointers are used to allocate memory dynamically. In C++, a pointer declared to a base class could access the object of a derived class. However, a pointer to a derived class cannot access the object of a base class.
A pointer to a C++ class is done exactly the same way as a pointer to a structure and to access members of a pointer to a class you use the member access operator -> operator, just as you do with pointers to structures. Also as with all pointers, you must initialize the pointer before using it.
It depends.
Even if you use the pointer, you can initialize the member in the initialization list, but that's not your biggest concern.
There are advantages and disadvantages to both:
the class will be smaller in memory
you only need a forward declaration to the other class - no need to include the other header in your header
can use derived objects from B
as members
can only use objects of the base class. What if you want to derive from B
?
more memory for each instance
constructor of B
will be called on construction of A
you need the full definition of B
inside the header
I'll edit my answer if I think of more.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With