diff --git a/c++.html.markdown b/c++.html.markdown
index 176ea1a8..f3dc8e20 100644
--- a/c++.html.markdown
+++ b/c++.html.markdown
@@ -818,51 +818,51 @@ void doSomethingWithAFile(const std::string& filename)
// Smart Pointer
/////////////////////
-// Generally a smart pointer is a class, which wraps a "raw pointer" (usage of "new"
+// Generally a smart pointer is a class which wraps a "raw pointer" (usage of "new"
// respectively malloc/calloc in C). The goal is to be able to
-// manage the lifetime of the object being point to without explicitly deleting
+// manage the lifetime of the object being pointed to without ever needing to explicitly delete
// the object. The term itself simply describes a set of pointers with the
// mentioned abstraction.
-// Basically smart pointers should preferred over raw pointers, to prevent
-// risky memory leaks, which happens if you forget to delete the object.
+// Smart pointers should preferred over raw pointers, to prevent
+// risky memory leaks, which happen if you forget to delete an object.
// Usage of a raw pointer:
Dog* ptr = new Dog();
ptr->bark();
delete ptr;
-// With the usage of smart pointers you dont have to worry about the deletion
-// of a object anymore.
-// A smart pointer describes a policy, to count the references on the
-// pointer. As matter of fact the objects gets destroyed when the last
-// reference on the object gets destroyed.
+// By using a smart pointer, you don't have to worry about the deletion
+// of the object anymore.
+// A smart pointer describes a policy, to count the references to the
+// pointer. The object gets destroyed when the last
+// reference to the object gets destroyed.
// Usage of "std::shared_ptr":
void foo()
{
-// Its not longer necessary to delete the Dog.
+// It's no longer necessary to delete the Dog.
std::shared_ptr doggo(new Dog());
doggo->bark();
}
// Beware of possible circular references!!!
// There will be always a reference, so it will be never destroyed!
-std::shared_ptr doggo_one (new Dog());
-std::shared_ptr doggo_two (new Dog());
+std::shared_ptr doggo_one(new Dog());
+std::shared_ptr doggo_two(new Dog());
doggo_one = doggo_two; // p1 references p2
doggo_two = doggo_one; // p2 references p1
-// As mentioned before there is a set of smart pointers. The way you have to
-// use it, is always the same.
-// This leads us to question, when to use which one?
-// std::unique_ptr - use it when you just want to hold one reference on
-// the same object.
-// std::shared_ptr - use it when you want to hold multiple references on the
-// same object and want to make sure that it´s de-allocated
-// when all refences are gone.
-// std::weak_ptr - use it when you want to hold multiple references from
-// different places for references for which it´s no problem
-// tp de-allocate.
+// There are several kinds of smart pointers.
+// The way you have to use them is always the same.
+// This leads us to the question: when should we use each kind of smart pointer?
+// std::unique_ptr - use it when you just want to hold one reference to
+// the object.
+// std::shared_ptr - use it when you want to hold multiple references to the
+// same object and want to make sure that it's deallocated
+// when all references are gone.
+// std::weak_ptr - use it when you want to access
+// the underlying object of a std::shared_ptr without causing that object to stay allocated.
+// Weak pointers are used to prevent circular referencing.
/////////////////////