2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

はじめてのC++【50日目】

Posted at

はじめに

Linkedin Learning は日本語ではなく英語で検索してみると、物凄い数の動画がありました。日本語だと2コースしかなかった C++講座 も 英語検索だと40種類以上もあった。これは、英語から逃げてきた私が英語を学ぶときがきた。 やはり、情報系は 英語 大切だなぁ、、、。
ちなみに Go の動画も英語versionならあった、、、。

C++

スマートポインタ

前にも一度スマートポインタをしたが、便利さはわかったけど使い方がいまいちわからなかったのでもう一度スマートポインタについて調べてみる。

スマートポインタとは?
スマートポインタとは、 newdelete を勝手にしてくれる便利なポインタ変数である。

使ってみる

smartpointer
#include <iostream>
#include <memory>

//構造体を定義
struct X {
  ~X()
  {
    std::cout << "~X()" << std::endl;
  }
  int AAA( int a )
  {
    return a * 2;
  }

};

int main()
{
  int a = 5;
  std::unique_ptr< X > ptr { new X() }; //shared_ptrでもOK

  std::cout << ptr->AAA(5) << std::endl;

}
実行結果
10
~X()

std::shared_ptr と std::unique_ptr の違いは、共有ができるかどうかである。unuque_ptrはコピー不可能なクラスである。しかし、 std::move を使うことで所有権を譲渡することができる。そのかわり、shared に比べて 処理が早い。

譲渡ってなに?

test.cpp
#include <iostream>
#include <memory>

//構造体を定義
struct X {
  ~X()
  {
    std::cout << "~X()" << std::endl;
  }
  int AAA( int a )
  {
    return a * 2;
  }

};

int main()
{
  int a = 5;
  std::unique_ptr< X > ptr { new X() };

  std::unique_ptr< X > ptr2 = std::move(ptr);


  std::cout << ptr2->AAA(10) << std::endl;

  std::cout << ptr->AAA(5) << std::endl;

}
実行結果
20
10
~X()

ん?ん????
ptr から ptr2 に譲渡したら ptr は使えなくなるものだと思ってたけど違うみたい。
ptrを開放しても ptr2 には何も影響を及ぼさないが、 ptr2 を開放すれば、 ptr も開放されるってことかな。また明日調べてみる。

make_shared使ってみた

make.cpp
#include <iostream>
#include <memory>

//構造体を定義
struct X {
  ~X()
  {
    std::cout << "~X()" << std::endl;
  }
  int AAA( int a )
  {
    return a * 2;
  }

};

int main()
{
  int a = 5;
  auto ptr = std::make_shared< X >() ;



  std::cout << ptr->AAA(5) << std::endl;

}
結果
10
~X()

std::make_shared を使うと newdelete も使わない! でも、 shared_ptr などと違い auto に入れる必要がある。

終わりに

スマートポインタに対して、苦手意識が消えたのでこれからは積極的に使っていこうと思う。
やはり、動画は本と違い、頭に入って来る。明日からはロベールとlinkedinの英語の動画を進める。
50日目いったから、目次みたいなページ作って、何日目で何やったかとかをまとめたい。(前書いたスマートポインタのページ探すのとても辛かった笑)

2
0
9

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?