You are assigning to nullptr since a new object was never created. The proper code should be
```
std::unique_ptr<LorentzVector> temp( *p4Polar_.load(std::memory_order_acquire) );
LorentzVector* expected = nullptr;
if( p4Cartesian_.compare_exchange_strong(expected, temp.get(), std::memory_order_acq_rel) ) {
   temp.release();
}
```
Alternatively, this class could be changed to use the edm::AtomicPtrCache class in DataFormats/Common.