1.これは、オブジェクトを指すことができます。
2.これは、オブジェクトの終わりを過ぎてちょうどすぐに場所を指し示すことができます。
3.それは、任意のオブジェクトにバインドされていないことを示す、ヌルポインタであることができます。
4.それは無効になることができます。前の3以外の値が無効です。
C ++の3つの方法で合法的なポインタを:
オブジェクトへの1ポイント
2バイトの位置に次の目標点の終わり
EXP。以下のための(ベクトル<整数> ::イテレータITER = vecInt.begin();!ITER = vecInt.end(); ++ ITER)
3.ポイントNULLポインタ
それ以外の場合は、無効なポインタであります
生成された不正なポインタのシナリオ:
1のライフサイクルの終わりを指すオブジェクトポインタへの非ヌルポインタ
クラスA
{
int型I1 = 0。
ダブルD1 = 0;
char * CH = nullptr;
パブリック:
()
{
I1 = 1。
D1 = 1。
CH =(CHAR *)のmalloc(4)。
strcpy_s(CH、3、 "VI")。
}
ボイドshowch()
{
COUT << CH << ENDL。
}
ボイドshowi()
{
COUT << I1 << ENDL。
}
〜A()
{
フリー(CH)。
}
}。
INTメイン()
{
ダブルDVAL = 2.03。
** PP = nullptr;
以下のために(; iは、1 <; I = 0 int型私は++)
{
A11。
a11.showch();
a11.showi();
* pを=&A11;
PP =&P;
}
//回復されたオブジェクトへのポイントは、コンパイラは文句はありません
(**頁).showi(); //ビルドタイプのまだ消去されたり上書きされていないメモリの内容
(**頁).showch(); // 動的に割り当てられたメモリ内容を消去されています
}
結果:
2.動的な割り当て空間クラスメンバー実装されていないコピーコンストラクタ
クラスのメッセージ
{
プライベート:
CHAR * pmessage。
公共:
無効ShowIt()constは
{
COUT << ENDL << pmessage。
}
メッセージ(CONSTのchar *テキスト= "Defautメッセージ")
{
pmessage =新しいCHAR [strlenを(テスト)+ 1]。
strcpy_s(pmessage、strlenを(テキスト)+ 1、テキスト)。
}
〜CMessage()
{
[] pmessageを削除します。
}
}。
メインint型()
{
メッセージmotto1(「Fallout4。」);
メッセージmotto2(motto1); //もしmotto1またはライフサイクルの他端は不正ポインタを生成する、請求motto2、コピーコンストラクタは、二つの異なる指示物体ことを理解すべきです
}