#include <iostream>  // for std::cout, std::endl

#include <memory>    // for std::unique_ptr

#include <cstdlib>   // for EXIT_SUCCESS



void Leaky() {

  int *x = new int(5);  // heap-allocated

  (*x)++;

  std::cout << *x << std::endl;

}  // never used delete, therefore leak



void NotLeaky() {

  std::unique_ptr<int> x(new int(5));  // wrapped, heap-allocated

  (*x)++;

  std::cout << *x << std::endl;

}  // never used delete, but no leak



int main(int argc, char **argv) {

  Leaky();

  NotLeaky();

  return EXIT_SUCCESS;

}