Is a shared pointer (std::shared_ptr) safe to use in a multi-threaded program? I am not considering read/write accesses to the data owned by the shared pointer but rat