A linear type system is similar to C++'s auto_ptr class, which behaves like a pointer but is invalidated by being set to null after use in an assignment. However, the linearity constraint can be checked at compile time, whereas auto_ptr can only raise exceptions at run time if it is misused.
This example uses C++-like notation, but shows a language with a linear type system (which therefore is not C++).
Dog* d = new Dog(name="Fido" ); // creates a reference to a new object
Dog* p = d; // uses d to create a reference to the same object: this forces d out of scope
print p->getName(); // output "Fido"
print d->getName(); // COMPILE-TIME ERROR: d was forced out of scope by its use above and is not a valid variable here