コンテンツ
- 動的メモリとスマートポインタ
- 動的配列
- テキストクエリプログラム:ライブラリを使用します
- 概要
0.概要
オブジェクト(動的に割り当てられたオブジェクト)その場所のライフ(寿命)の独立の動的な割り当てが作成された、彼らは(無料)がリリースされる明確にする必要があります。
動的に割り当てられたオブジェクトを利用するために、より安全な、ライブラリ定義2つのスマートポインタ(スマートポインタ)タイプの動的に割り当てられたオブジェクトを管理します。スマートポインタは自動的に適切なタイミングで指しているオブジェクトを解放していることを確認します。
- スタティックメモリ、スタックメモリ
- スタティックメモリ:
- ローカル静的オブジェクトのための
- クラスの静的データメンバーの
- 任意の関数外で定義された変数について
- スタックメモリ
- 関数内で定義された非静的オブジェクトのための
- 自動的に作成され、コンパイラによって破壊されました。静的オブジェクトは、彼らが使用される前に割り当てられているとすると、プログラムの終了を破壊しています。
- スタティックメモリ:
- ヒープメモリ(空き店舗)
- 動的に割り当てられたオブジェクトに対して、つまり、プログラムが実行時に割り当てることをオブジェクト。
- 明示的に破棄しなければなりません
1.動的メモリとスマートポインタ
事業者:
- 新しい新しい:メモリ割り当て、初期化オブジェクトは、そのオブジェクトへのポインタを返します。
- [削除]:メモリを解放し、オブジェクトを破壊します。
動的メモリの難しさ:
- メモリリーク(メモリリーク):リリースメモリを忘れて
- 不正なポインタ:ポイントはメモリを解放します
スマートポインタ(C ++ 11):使用するなど、通常のポインタのように、自動的にそれが指しているオブジェクトを削除することができます重要な機能を持っています。
- shared_ptr:複数のポインタが同じオブジェクトを参照することができます
- weak_ptrを:管理するオブジェクトへの弱参照のshared_ptr
- unique_ptrを:それはポイントするオブジェクトを所有しています
1.1 shared_ptrのクラス
ベクトルのように、それはまた、スマートポインタテンプレートであるとして。そのため、あなたはそれが型のオブジェクトを指し、スマートポインタ、追加情報を提供する必要性を、作成したとき。
shared_prt<string> p1; // shared_ptr可以指向一个字符串
スマートポインタのポインタと同様の方法を使用します。(間接参照)を引用するスマートポインタは、それが指しているオブジェクトを返します。
// 如果p1不是空指针,检查其指向的空字符串 if (p1 && p1->empty()) *p1 = "hi"; // 去引用并赋新值给字符串
make_shared函数
動的なメモリ割り当てで安全な方法の使用は、ライブラリの関数を呼び出すことですmake_shared
「」
#include <memory> // for the use of 'make_shared'
// shared_ptr that points to an int with value 42
shared_ptr<int> p3 = make_shared<int>(42);
// p4 points to a string with value 999999999
shared_ptr<string> p4 = make_shared<string>(10, '9');
// p5 points to an int that is value initialized to 0
shared_ptr<int> p5 = make_shared<int>();
2.ダイナミックアレイ
3.ライブラリ:テキストクエリプログラム
4.まとめ
参照
- 「C ++入門、第5版」、スタンリー・B・リップマン