trying to introduce smart pointers