add SmartPointer