Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Owning instance of object vs owning pointer

Tags:

c++

pointers

Let's say I have two class A and B. There are 2 ways in which class B can use A.

First:

class B
{
  A *a;
}

Second:

class B
{
  A a;
}

Why most of the C++ libraries prefer to use First version as compared to Second. What could be the disadvantage of using Second approach. Does it relate to Stack vs Heap assignment? Please clarify.

like image 858
bhavesh Avatar asked Oct 30 '25 07:10

bhavesh


1 Answers

Some advantages of owning an instance (class B { A a; };):

  • No need to worry about creation and destruction of a because it happens automatically.
  • No need to worry that a might be a dangling or null pointer.
  • Memory locality: a lives where instances of B live. If you have a large array of Bs and access each B's A in turn, this could make a significant speed difference.
  • Memory efficiency: no storage for a pointer is needed.

To make a huge sweeping generalization, one could say that this approach is faster and safer.

Some advantages of owning a pointer (class B { A *a; };):

  • Polymorphism: a can actually point to a subclass of A.
  • a can be reassigned without needing to copy an instance of A.
  • a can live independently of B or even be owned by another object entirely.
  • a can be null, freeing up memory if it's not always needed.

To make another huge sweeping generalization, one could say that this approach is more flexible.

like image 176
Thomas Avatar answered Nov 01 '25 21:11

Thomas