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

Mik*_*ike 1 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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

lit*_*adv 7

Structure *s = new Structure(pdb_filename);
Chain     *c = new Chain();
Run Code Online (Sandbox Code Playgroud)

你刚刚c在这里定义

while( ... read file ... ) {
    if ( ... new chain ... ) {
        Chain *c = new Chain();
Run Code Online (Sandbox Code Playgroud)

您刚才定义c在这里遮蔽另一个.

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

现在你正在看哪两个?

我想你已经可以看到问题了.

  • @Mike:因为这不是错误.两个`c'在不同的范围内. (2认同)

cni*_*tar 5

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

这很难相信.

g ++会一遍又一遍地给出相同的指针吗?

不.每次打电话new Chain都不一样Chain.它是一个不同的指针,指向不同的内存(这就是它的原因new).它也在影响c之前while.