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

Calling new multiple times within same for loop

本文关键字:调用 new 同一个 for 循环      更新时间:2023-10-16

下面是我解析分子动力学模拟的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
    }
}

当包含函数被调用时,代码像往常一样运行,并像代码片段的前两行一样给出全新的Structure和Chain对象。

当循环遍历文件时再次满足新链的条件时,代码返回与之前相同的指向该对象的chain指针。

g++会一遍又一遍地给出相同的指针吗?有什么办法可以绕过这个吗?如果我将c指针添加到's'子向量,我认为调用delete c会导致更大的头痛?

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

你刚刚定义了c

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

您刚才在这里定义了c ,还是遮蔽了另一个。

当循环遍历时再次满足新链的条件时

现在你在看哪一个?

我想你已经看到问题了。

代码返回与

之前相同的指向对象的Chain指针

真让人难以置信。

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

。每次调用new Chain,都是不同的Chain。它是一个不同的指针,指向不同的内存(这就是为什么它是 new )。它也在while之前阴影c

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

我想我大概知道你的问题是什么了——

循环内的c与循环外的c指向的变量不同。循环外的c将始终保持其相同的值。