動的に割り当てたメモリがどこにも向いていないことを保証しようとしていました。
私は次のことを試しました
template<typename T>
[...something here...]
T *mem = new T[size];
for ( int i=0; i<size; i++ )
{
(mem+i) = NULL;
}
[...something else there...]
人が書くことができるように
int *pInt = new int;
pInt = NULL;
しかし、上の例mem
では「左辺値」ではないため、それは機能しませんか?
ヒープに 1 つのタイプ固有のメモリを動的に割り当てる場合にのみ、これが当てはまるように見えるのはなぜですか?
さらに、テンプレート関数を使用すると、1 つの奇妙なことが起こります。
template<typename T>
[...something here...]
T mem = new T[size];
for ( int i=0; i<size; i++ )
{
*(mem+i) = NULL;
/* or the equivalent
mem[i] = NULL;
*/
}
[...something else there...]
NULL
基本的に何でもかまいません変数またはオブジェクトに(基本的にはint
値 0)を割り当てるにはどうすればよいでしょうか? それは変数かもしれませんがint
、うまくいくでしょう。しかし、テンプレート関数を で呼び出したらどうなるでしょうかstd::string
。まったく機能しないはずですよね?では、なぜこのようなものを書くことが合法であるように見えるのでしょうか?
ジェネリックをプログラミングする自由ですが、間違った型でジェネリック関数を呼び出さないように注意する責任もありますか?