SSブログ

引数でポインタを変更しないことを明示するには? [C/C++]

C++で関数の引数にポインタを渡すとき、その渡された関数内でポインタの指しているデータ、または、ポインタを変更しないことを明示したい。

これは const を用いれば可能だ。 「ポインタの指しているデータ、または、ポインタを変更しないこと」というのは、言葉だと分かりにくいけど、サンプルコードを見れば分かりやすい。

//example 1
int toge(const int* p)
{
*p = 22; // NG
p = new int(100); // OK
}

int toge(int* const p)
{
*p = 22; // OK
p = new int(100); // NG
}

int toge(const int* const p)
{
*p = 22; // NG
p = new int(100); // NG
}
ちなみに const int* const p であっても、delete は有効らしい。すなわち次のようになる。
void example1Const(const int* const p)
{
delete p; // OK
}
ということは、関数の引数に何かのインスタンスを渡したら、いつの間にか delete されてしまうことがあり得ると言うことですね。怖いねぇ。
タグ:C++ programming

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。