I just remembered that in this case it's better to use `std::unique_ptr` instead of `std::shared_ptr'  because it's slightly more efficient...