引数でポインタを変更しないことを明示するには? [C/C++]
C++で関数の引数にポインタを渡すとき、その渡された関数内でポインタの指しているデータ、または、ポインタを変更しないことを明示したい。
これは const を用いれば可能だ。 「ポインタの指しているデータ、または、ポインタを変更しないこと」というのは、言葉だと分かりにくいけど、サンプルコードを見れば分かりやすい。
ちなみに const int* const p であっても、delete は有効らしい。すなわち次のようになる。//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
}
ということは、関数の引数に何かのインスタンスを渡したら、いつの間にか delete されてしまうことがあり得ると言うことですね。怖いねぇ。void example1Const(const int* const p)
{
delete p; // OK
}
タグ:C++ programming