我试图保证我动态分配的内存没有指向任何地方。
我尝试了以下
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
中不是“左值”?
为什么只有在我在堆上动态分配更多一种特定于类型的内存时才会出现这种情况?
另外如果我使用模板函数会发生一件奇怪的事情,因为它似乎是合法的
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
. 它根本不应该工作,对吧?那么为什么写这样的东西似乎是合法的呢?
是否可以自由编程泛型,但也有责任注意,而不是调用错误类型的泛型函数?