// C++
#include <memory>
#include <stdio.h>

void println(const std::string& out) {
  printf("%s\n", out.c_str());
  fflush(stdout);
}

int main() {
  // std::unique_ptr<string> hoge(new string("hoge")); と同義です。
  // 型名を 2 度書くのを避け、コード上から new をなくすことができます。
  auto hoge = std::make_unique<std::string>("hoge");
  auto piyo = std::make_unique<std::string>("piyo");
  println(*hoge);  // => hoge
  println(*piyo);  // => piyo
  hoge = std::move(piyo);  // 変数 piyo にあるポインタの所有権は変数 hoge に移ります。
  println(*hoge);  // => piyo
  println(*piyo);  // 変数 piyo は初期化されてしまっているため、メモリアクセス違反が起きます。
}