SIMPLE 0 シリーズ : ザ・備忘録

仕事の事を書くし、勉強した事もかくよ

スマートポインタについて

職場で”スマートポインタ”というワードを耳にしたので、どんなものか調べる

スマートポインタとは

C++環境で利用される、メモリの自動的解放をしてくれるクラス。

従来のC++では、new、deleteを用いてメモリの取得、解放を行いますが、
これだとメモリの解放忘れによるエラー発生等を招くことがあります。

この事態を回避する為に考えられたのがスマートポインタです。

int*のような生のポインタではなくて、スマートポインタを介してメモリを扱うことで、
動的確保の利用の際に生じるメモリの解放忘れ等の危惧性を低減できるそうです。

スマートポインタの仕組み

  1. スマートポインタに確保したメモリを渡す
  2. スマートポインタは渡されたメモリの所有権を得る。このスマートポインタが破棄されるまで、このスマートポインタを介さないと利用打出来ず、解放もできない
  3. 所有権を持つスマートポインタがすべて破棄される。この際、メモリ解放を自動で気に行う。(ディストラクタを用いて所有権を持つメモリが不要となる瞬間を判断する)

以上の流れでメモリの解放忘れを防ぐ。

3種類のスマートポインタについて

(編集中)



※参考元、というかほぼ内容書き写させて頂いたサイト
qiita.com

マクロ関数とインライン関数について

マクロ関数とインライン関数がよく比較されているので、使い方も含めもう一度勉強がてらまとめる


マクロ関数

”#define = 文字の並びを他の文字に変換する = マクロ置換”

という事で、#defineで宣言された関数がマクロ関数と考えていいと思う。


#define定義されるものは以下の2つに分けられる

  • オブジェクト形式マクロ
#define マクロ名 置換後の文字の並び

#define YEAR 2017
  • 関数形式マクロ
#define マクロ名(引数のリスト) 置換後の文字の並び

#define SIZE_OF_ARRAY(array)  (sizeof(array)/sizeof((array)[0]))

今までオブジェクト形式マクロしか用いていませんでしたが、
以下のサイトで書いてるように、マクロ関数にする方が
処理速度が速くなる等メリットがあるようです


d.hatena.ne.jp

oshiete.goo.ne.jp

インライン関数

インライン関数は小さい関数で使うことをMSDNでは推奨されており、
オーバーヘッド削減効果がある関数として紹介されています


宣言方法

inline 関数宣言文


上記方法でinline関数の宣言はできるが、inline化ができるかはコンパイラ次第。

※メンバ変数もインライン関数化が可能

class class-name {
	type member_f() {
		statements...;
	}
};


参照元HP
インライン関数

使い分けについて

https://msdn.microsoft.com/ja-jp/library/bw1hbe6y.aspx

MSDNでは以下のように記されてる

インライン関数はマクロに似ていますが、インライン関数がコンパイラによって解析されるのに対し (関数コードはコンパイル時に呼び出しの時点で展開されるため)、マクロはプリプロセッサによって展開されます。 
そのため、これらにはいくつかの重要な違いがあります。

インライン関数は、通常の関数に適用されるタイプ セーフのすべてのプロトコルに従います。

インライン関数は、他の関数と同じ構文を使用して指定されますが、関数宣言に inline キーワードを指定する点が異なります。

インライン関数に引数として渡された式は、1 回だけ評価されます。 マクロでは、引数として渡された式が複数回評価される可能性があります。

【Github】VisualStudioとの連携方法

GitHubリポジトリを作成後に簡単にVisualStudioと連携できる方法がある事がわかったので記載

 

f:id:wawawassyoi:20161119154447p:plain

  1. GitHub上で新規にリポジトリを作成。作成したページに飛び、"Clone or download"⇒”Open in Visual Studio”でVisualStudioとの連携準備ができます
  2. 上記操作を行うとVisualStudioが起動し、自動的に指定されたGitHub上のリポジトリをVisualStudioで複製するかを問われるので、”複製する”ボタンをクリック。
  3. その後チームエクスプローラ・ホームの下画面上に”ソリューション”項目があるので、その中の”新規作成”をクリック。このリポジトリに作成したいプロジェクトを、いつもVisualStudio上でプロジェクトを新規作成する際の手順と同じ要領で選択、作成します。これでローカルにプロジェクトを作成することは完了
  4. これをGitHub上にプッシュしないとGitHubとVisualStudio間で連携はおこなえません。(コミットするとGitHub上のプロジェクトをローカルにDLするだけ)””ホームと書かれた部分をクリック、”同期”タブをクリックし、プッシュ処理を行う。これで同期完了

走り書き程度のメモだったので、時間があればもっと細かく書くかも

【Windows10】Bluetoothレシーバが利用できなくなった時の対処法

Windows7で普通に使えていたBluetooth USBレシーバが、Windows10にアップデートしたら今までペアリングできたBluetooth機器の認識すらできなくなったので、この機会に対処法をまとめておきます。

(使ってたのは「PLANEX BT-MICRO4」

www.planex.co.jp

  • Bluetoothドライバが正常にインストールできている場合

下のスタート画面の「設定」

f:id:wawawassyoi:20161112130229j:plain上の左から「スタートメニューの歯車印「設定」⇒「デバイス」⇒「Bluetooth」を選択。Bluetooth画面内で「Bluetooth」をオンにする

これでBluetooth機器のペアリングが可能になります

 

しかし自分はデバイスメニュー内に「Bluetooth」の項目が出てこなかったので小一時間悩みました。デバイスマネージャーでも「Bluetooth」の項目があったので、ドライバも正しく入っていると思ったので。しかし、

 

Bluetooth」メニューがない=Bluetoothのドライバを正しく選択できていない

こう認識したほうが良いみたいです。

 

  • Bluetoothドライバが正常にインストール(選択)できていない場合

nary.cocolog-nifty.com

ch.nicovideo.jp

上記サイトを参考にしました

 

f:id:wawawassyoi:20161112131324j:plain

「デバイスマネージャ」を開いて、ドライバの再選択が必要になります。

 

まず自分が勘違いしてたのは、一番上のBluetoothの項目は今回関係ない事。

下の「ユニバーサルシリアルバス コントローラ」内のBluetoothアダプターの項目が今回関係します。

Bluetoothアダプター項目上で右クリックし、プロパティを開きます。そして「ドライバー」タブ内の「ドライバの更新」ボタンを押します。

その後は

  1. 下側の「コンピューターを参照して...」をクリック
  2. 「Generic Bluetooth ~」と書いてある項目を選択
  3. 閉じるをクリック

これで終了。うまくいくと「デバイス」メニューに「Bluetooth」の項目が表示されるようになります。そこまで言ったら最初に書いた対処法でBluetooth機器とのペアリングができるようになるはずです。

 

 

用語備忘録的な何か: バイトオーダー

開発中にリトルエンディアン、ビックエンディアンを意識すべき場面が増えたのでまとめる

 

バイトオーダ - ビッグエンディアン/リトルエディアン

 

  • そもそもバイトオーダーって…

バイトのデータ列をバイト列に変換する方法

 

  • なんでこんなの考える必要あるの?

現在のメモリアクセスの主流:バイトアドレッシング方式(1Byte毎にアドレスを付ける方式)

 

プログラムの数値演算単位:レジスタ長が単位(32bitプロセッサの場合、1度に32bitの数値を扱う)

 ⇒「32bitは4Byteだが、どの順番でメモリに書くの?」

 となる。この際、リトル、ビックエンディアンを考えるのだ

 

正直上のURLリンクにある画像を見るのが一番わかりやすい

 

トルエンディアン

最下位ビットの属するバイト列を低位のバイト列に格納する。バイナリダンププログラムで読むと「順序が逆」

 

ビックエンディアン

最上位ビットの属するバイト列を低位のバイトに格納する。バイナリダンププログラムで読むと「そのまま読める」

 

トルエンディアン、ビックエンディアンの採用によって処理速度に違いが出るらしいですが、これは今回割愛