The c3 variable is referring to null.
It was never referring to any object.
So you do not need to worry about c3 variable.
The point is:
reading the question at K&B. when // doStuff is reached, only the object that was referenced by c1 will be eligible for GC.
Regarding the instance variable story of type Short that belongs to CardBoard we need to consider 2 instances eligible.
I’ve looked at a lot of different solutions, and in my humble opinion Aspose is the way to go. Here’s the link: http://aspose.com