如果在匿名命名空间中声明变量,会使用什么内存?像:
namespace
{
Class *pclass;
void fSet()
{
pclass = new Class;
pclass->func();
}
void fDes()
{
delete pclass;
pclass = NULL;
}
}
这样安全吗?
答案 0 :(得分:2)
命名空间对使用的内存没有影响:指向Class
的指针位于全局(静态)内存区域,而它指向的对象位于动态(堆)内存区域。这与使用命名命名空间一样安全。
答案 1 :(得分:1)
我不是很确定,但我认为它是在代码存储器上或程序数据部分的某个地方(也在程序的二进制文件中提供)。它就像全局变量和静态变量。命名空间仅用于组织代码以避免名称冲突。
我认为这取决于编译器将它们放在代码存储器中(以及应用程序二进制文件中)。但它们既不会堆叠也不会堆积。
pClass可以指向的内存地址可以位于堆栈,堆或代码内存中。
当涉及到安全漏洞时,驻留在代码存储器中的变量可以比在堆栈和堆中更容易被黑客攻击,因为它们甚至可以在运行程序之前轻松地存储在内存中。
当谈到组织代码的安全性时,我认为如果其他源文件使用相同的“pClass”名称仍然存在名称冲突,因为编译器不知道将使用哪一个。但我也不确定这一点。我不太了解命名空间行为。这只是猜测。
答案 2 :(得分:0)
很安全。 C ++标准不赞成使用文件静态,而是建议使用未命名的命名空间。