[英]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.