在同一个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
}
}
当包含函数被调用时,代码像往常一样运行,并像代码片段的前两行一样给出全新的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将始终保持其相同的值。
相关文章:
- 在不同的编译器版本中调用new[]和delete[]
- 通过传递外部指针或内部调用 new 构造的类,我可以在销毁时天真地删除这个指针吗?
- C++:光线追踪器导致内存不足错误 - 由于反复调用"new"?
- 在CUDA内核中调用new运算符
- 为什么智能指针不能在其构造函数中为我调用 new()?
- 如果我在 C++ 中调用 new,但堆内存不足,会发生什么情况
- 如何在多维数组上调用 new
- 运算符在C++中何时调用'new'构造函数
- 调用"new"以存储到shared_ptr的引用向量中
- 为什么连续调用new[]不会分配连续内存
- Java可以初始化类似C++的对象数组中的对象,而不必循环和调用new
- 如何为数组的类型调用 new 运算符
- 在条件调用new时调用delete
- c++重载和继承,调用new方法
- 在c++ 11中,如何调用new并为对象保留足够的内存?
- 调用'new'如何调用用户定义的放置分配函数?
- 在同一个vtkSmartPointer上调用new两次是不安全的吗?
- 当调用new函数时,返回地址值发生了什么?
- 在同一个for循环中多次调用new
- C++ 构造函数/析构函数调用 &对动态创建的数据调用"new"是否会删除旧数据?