#C++ This behavior is actually specified in the standard (and that's why it was deprecated). #include<iostream> #include<memory> int main() { std::auto_ptr<int> a = new int(0); std::cout<<a.get()<<'\n'; std::auto_ptr<int> b = a; std::auto_ptr<<a.get()<<'\n'; } Output some address 0 The process that causes this is the same as Abhijit's answer but without requiring a `std::move` and the same as marinus' answer but using a standard class instead of defining it myself. Edit: I'm adding some explanation. In the output, "some address" will actually be a hex value for the address of the allocated integer. `std::auto_ptr` releases its stores pointer when assigned to another `auto_ptr` and sets its internal pointer to 0. Calling `get()` retrieves access to the stores pointer.