繁体   English   中英

C ++指针和内存释放

[英]C++ Pointers and Memory Deallocation

我不太习惯严格的类型检查和较低级别的东西,例如释放。 最近,在尝试按照以下方式写东西时

// Product is a struct I defined earlier, nothing fancy
vector<string, Product>::iterator it;
// Do some stuff with the iterator...
// And now I know I won't be using the iterator again
map<string, Product>::iterator it;

但是,这产生了错误“局部变量“ it”的重复声明”。 所以我的问题就是,为什么会这样? 我研究了内存解构,但据我所知,显然不可能解构迭代器,因为它们实际上是指针? 如果您知道不再需要旧的变量,C ++真的不允许您对不同的变量使用相同的名称吗?或者通常您会将它们释放到内存中吗?

由于it在同一范围内 ,因此无法重新声明:变量阴影不适用于同一范围。

一种解决方法是使用作用域块:

// Product is a struct I defined earlier, nothing fancy
{
    vector<string, Product>::iterator it;
    // Do some stuff with the iterator...
    // And now I know I won't be using the iterator again
}

{
    map<string, Product>::iterator it;
    // However, this yielded the error 'duplicate declaration 
    // Not any more!
}

实际上,在C ++中,您仅需要作用域块之一,但是可以将其解释为混淆的不对称性。 Java试图解决这个问题,但是惨败,因为您可以删除第二对而不是第一对!

不管使用哪种语言,如果在相同范围内为两个不同的变量赋予相同的名称(它们的意思是不同的东西),您将[编辑]混淆后面的每个人(包括此变量)案例)。 对于需要维护您的代码的人来说,这是至关重要的。

尽快摆脱这种习惯。 语言为您提供什么都无所谓。 只是不要这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM