使用C++ 11,我喜欢创建一个布尔数组并立即清除它
bool *mymap = new bool[n];
Run Code Online (Sandbox Code Playgroud)
n是可变的.
现在,这已经清除了阵列占用的内存吗?如果没有,是否有更好的方法来清除数组,而不是在所有元素上使用循环,将每个元素分别设置为false?
我考虑使用std:memset(),但这需要我知道数组的大小.现在,初学者可能会说:容易,大小是n*sizeof(布尔).但我不买.编译器可能决定以不同方式打包它们,甚至将它们打包为位,不是吗?
那么,有没有办法更清晰地告诉阵列的大小?我想可能有一个std:arraysize()函数,它只返回内存中已分配数组的空间.毕竟,必须以某种方式在运行时维护该信息,否则删除调用将不知道要释放多少,对吧?
jua*_*nza 10
具体问题的答案是否定的,你无法确定指向的数组的长度mymap.该语言根本没有提供任何机制.
但是如果您要做的就是确保将数组的所有元素都设置为false,那么您所要做的就是将值初始化:
bool* mymap = new bool[n]();
// ^^
Run Code Online (Sandbox Code Playgroud)
不幸的是,这仅适用于内置类型的零值.没有相同的方法来设置所有值true.
你不能以标准的方式做到这一点.但是,不同的编译器支持不同的黑客攻击,例如:
#if defined(_MSC_VER) || ( defined(__GNUC__) && defined(_WIN32) )
// a dirty MSVC and MinGW hack
size_t Size = _msize( mymap );
#elif defined(__GNUC__)
// a dirty glibc hack
size_t Size = malloc_usable_size( mymap );
#else
#error Implement for any other compiler
#endif
Run Code Online (Sandbox Code Playgroud)
但这些都是真正的黑客,所以要小心.
顺便说一句,std::vector可以帮助您在标准内解决您的问题.