home | help
std::unique_ptr::release(3)    C++ Standard Libary   std::unique_ptr::release(3)

NAME
     std::unique_ptr::release - std::unique_ptr::release

Synopsis
	pointer release() noexcept;  (since C++11)
				     (constexpr since C++23)

	Releases the ownership of the managed object, if any.

	get() returns nullptr after the call.

	The  caller  is  responsible  for cleaning up the object (e.g. by use of
     get_deleter()).

Parameters
	(none)

Return value
	Pointer to the managed object or nullptr if there was no managed object,
     i.e. the
	value which would be returned by get() before the call.

Example
     // Run this code

      #include <cassert>
      #include <iostream>
      #include <memory>

      struct Foo
      {
	  Foo() { std::cout << "Foo\n"; }
	  ~Foo() { std::cout << "~Foo\n"; }
      };

      // Ownership of the Foo resource is transferred when calling this function
      void legacy_api(Foo* owning_foo)
      {
	  std::cout << __func__ << '\n';
	  // [legacy code that no one understands or dares touch anymore]
	  // [...]
	  delete owning_foo;
      }

      int main()
      {
	  std::unique_ptr<Foo> managed_foo(new Foo);
	  // [code that might return or throw or some such]
	  // [...]
	  legacy_api(managed_foo.release());

	  assert(managed_foo == nullptr);
      }

Output:
      Foo
      legacy_api
      ~Foo

See also
	get	    returns a pointer to the managed object
		    (public member function)
	get_deleter returns the deleter that is used for destruction of the man-
     aged object
		    (public member function)
	reset	    replaces the managed object
		    (public member function)

http://cppreference.com 	   2024.06.10	     std::unique_ptr::release(3)

home | help