在同一个for循环中多次调用new

时间:2011-07-18 22:09:23

标签: c++ dynamic new-operator

以下是我的代码的快速片段,用于分析PDB文件以进行分子动力学模拟:

Structure *s = new Structure(pdb_filename);
Chain     *c = new Chain();

while( ... read file ... ) {
    if ( ... new chain ... ) {
        Chain *c = new Chain();
        s->add_child(c);        // Add reference to a vector to 
                                // save the Chain for later
    }
}

当调用包含函数时,代码将正常运行并提供全新的结构和链对象,如代码段的前两行所示。

当循环遍历文件时再次满足新链的条件时,代码会像以前一样返回与该对象相同的Chain指针。

g ++会反复给出相同的指针吗?有没有办法解决这个问题? 如果我将c指针添加到's'子矢量,我假设调用delete c会导致更大的麻烦?

3 个答案:

答案 0 :(得分:7)

Structure *s = new Structure(pdb_filename);
Chain     *c = new Chain();

您刚刚在这里定义了c

while( ... read file ... ) {
    if ( ... new chain ... ) {
        Chain *c = new Chain();

你刚刚在这里定义了c 再次阴影另一个

  

当循环遍历时,再次满足新链的标准   文件,代码返回与之前相同的链指针。

现在你正在看哪两个?

我认为你已经可以看到问题了。

答案 1 :(得分:5)

  

代码返回与之前对象相同的Chain指针

很难相信。

  

g ++会反复给出相同的指针吗?

没有。每次拨打new Chain时,都会有不同的Chain。它是一个不同的指针,指向不同的记忆(这就是 new 的原因)。它还会在c之前隐藏while

答案 2 :(得分:3)

new Chain()每次都应该给出一个不同的指针

我想我可能会知道你的问题是什么 -

循环中的c不会引用与循环外部的c相同的变量。循环外的c将保持相同的值。