簡體   English   中英

在同一個for循環中多次調用new

[英]Calling new multiple times within same for loop

這是我的代碼的快速片段,用於解析 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
    }
}

當調用包含的 function 時,代碼正常運行,並提供全新的 Structure 和 Chain 對象,如代碼段的前兩行所示。

當循環文件時再次滿足新鏈的條件時,代碼將與以前一樣返回指向 object 的相同鏈指針。

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再次影響了另一個。

當循環文件時再次滿足新鏈的條件時,代碼將與以前一樣返回指向 object 的相同鏈指針。

現在你在看哪一個?

我想你已經看到了問題所在。

代碼返回與之前相同的指向 object 的鏈指針

這很難相信。

g++ 會一遍又一遍地給出相同的指針嗎?

不,每次你調用new Chain都是不同的Chain 這是一個不同的指針,指向不同的 memory (這就是為什么它是new )。 它也在一段while之前遮蔽了c

new Chain() 每次都應該給出不同的指針

我想我可能知道你的問題是什么——

循環內的 c 與循環外的 c 引用的變量不同。 循環外的 c 將一直保持相同的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM