ポインタとの違いとの接続を引用
- ポインタは、エンティティ、それは、メモリが割り当てられており、マルチレベルポインタを可能にすることができます
- リファレンスは、作成時に初期化されていないと不変(それがconstのではありません一度のみ開始することができる)が、NULLを防止するための最良の初期設定を作成するには、ポインタを初期化する必要する必要があります
- 二つの異なるインクリメント(+)の結果は、基準値がインクリメントされ、アドレスポインタをインクリメントします。
- SIZEOF異なる結果が得られたのsizeof参照は(オブジェクト)のsizeofポインタ得られたポインタのサイズは、それ自体で、変数のサイズが指示されます
- 参照アクセスが元のオブジェクトに直接アクセスされ、ポインタが、間接的にアクセスされます
- 異なるパラメータの関数へのパラメータとして渡され、参照参加者がより安全な受け渡しポインタパラメータを渡すよりも、尋ねる次の参照
- 接触
- 内部リファレンスは、ポインタを使用して実装しました
- リファレンスはポインタの制限を受けています
なぜポインタを渡すよりも、より安全な参照渡し?
- リファレンスはそうNULL参照が存在しない場合、オブジェクト参照が有効であることを確実にするために作成したのと同じ時に初期化されなければならない。そして、ポインタが初期化を定義する必要はありませんので、それはNULLポインタかもしれとき、定義の後ろに任意の場所で再割り当てすることができます
- 参照がオブジェクトを指すように初期化されると、それは別のオブジェクト参照に変更することができない、と別のオブジェクトを指すようにポインタをいつでも変更することができます
- 見積もりの作成と破壊がコンストラクタをコピーしませんクラスを呼び出す
ヌル参照が存在しないため、と一度オブジェクトを指すように初期化の言及、それは安全性よりもその別のオブジェクトのポインタへの参照を変更することはできません。
constポインタがNULLポインタのまま、フィールドガイドを生成することが可能であるので、それはまだ安全ではないので。ソリューションは、スマートポインタです。
スマートポインタを紹介
スマートポインタ、クラスオブジェクトのポインタへの基本的なパッケージタイプのポインタ(このクラスは間違いなく基本的なニーズの異なる種類に合わせてテンプレートです)、およびdelete文を書くには、デストラクタでメモリポインタを削除します。
オブジェクトがスタックの1種類にスマートポインタを作成することで、呼び出される関数は、そのデストラクタを終了すると、たくさんのことが多いですデストラクタカウント、それは特定の条件に到達した場合の条件このような判断は、実空間へのポインタを置きます解放します。
ヒープメモリリークを引き起こす可能性が通常のポインタ、(解放し忘れ)、第二の剥離、野生のポインタ、メモリリークやその他の問題は、このような異常な手続き、ヒープメモリのより良い管理へのスマートポインタの使用として発生を使用してください。
一般的に使用されるスマートポインタ
ヘッダファイルに含まれるバージョン11の申し出後にC ++のスマートポインタ、
C ++ 98では、そこにある
std::auto_ptr
が、それは多くの問題があります。これは、コピー(コピーコンストラクタ)と代入(演算子=)をサポートしていませんが、コピーしたりするときの割り当てがエラーを要求しません。これは、プログラムがクラッシュする可能性があります。
auto_ptr<string> p1(new string ("auto") ; //#1
auto_ptr<string> p2; //#2
p2 = p1; //#3
文#3の後、p2は文字列オブジェクトの所有権を引き継いだ、所有権のp1は奪われる同じを削除しようとデストラクタP1およびP2を防ぐ-オブジェクト;
コンテンツp1のポイントにアクセスし、その後場合は、プログラムがクラッシュします、有効なデータへのP1はもはやポイントので。std::auto_ptr
unique_ptrを交換しています。
- unique_ptrを
時、一つだけ指定されたオブジェクトを指してunique_ptrを。
コピーや割り当てをサポートしていませんが、auto_ptrはより良い、直接の割り当ては、エラーをコンパイルします。本当に割り当ては、その後、あなたが使用する必要がしたいですstd::move
。 - shared_ptrの
参照に基づいて、共有オブジェクトを指す最後のshared_ptrが破棄されるときに、共有オブジェクトを解放し、共有所有権スマートポインタを提供し、スマートポインタを数えます。 - weak_ptrを
対象に精神的に可能なのポインタ、それはオブジェクトの寿命を制御していない経営者のshared_ptrスマートポインタへのスマートポインタで指されます。shared_ptrオブジェクトのshared_ptrにバインドされたのweak_ptrは、参照カウントは変更されません。オブジェクトの最後が破壊されるのshared_ptrを指摘したら、先のとがったが、この時点でのweak_ptrポイントがオブジェクトにあるにもかかわらず、解放され、オブジェクトがまだリリースさを指摘しました。