![](/img/trans.png)
[英]Regarding pointers and arrays and how they are assigned in memory in C++
[英]C++: How are pointers themselves handled regarding memory management?
我有一个很简单的问题; 我有包含指向对象的指针的数组。 有时,我会根据这些数组创建变异数组,仅在方法中使用它们。 在船尾我不需要它们。 在这种情况下,我不希望在我继续使用原始Array时销毁指向数据。 我不完全了解在临时数组中创建的指针(不是数据本身,而是指针)会发生什么情况? 记忆如何处理它们。 据我所知,指针只能指向一个地址。 您无法“删除”它们。
谁能给我更多的见识? 一直以来,我感觉自己的记忆力有问题。
在这种情况下,列表是我的“包”,它是数组实现的对象包装。 但是,由于它在索引之间包含空格,因此我使用getGapless来获得一个包,其中排除了nullptr索引。
我最后删除了我的包,但是并没有删除实际内容(通过其他方法完成)。
那么,“玩家”包中的那些指针何时超出范围?
virtual void processEntities(artemis::ImmutableBag<artemis::Entity*>& bag)
{
artemis::Bag<artemis::Entity*> * list = (artemis::Bag<artemis::Entity*>*)this->world->getGroupManager()->getEntities("HUMAN");
if(list == nullptr) return;//Kill function
artemis::Bag<artemis::Entity*> * players = list->getGapless();
for(int i=0; i<players->getCount(); i++)
{
for(int j=i+1; j < players->getCount(); j++)
{
if(intersects(*players->get(i),*players->get(j))){
std::cout << "Collide YEAH \n";
}
}
}
delete players;
}
不,不用担心! 您可以将指针视为与int
或double
相同的方式进行管理(至少在内存方面)。 指针本身就像一个int
,恰好包含其他一些对象或对象数组的地址。 指针从作用域中消失后,指针本身的内存将自动恢复。
例外是,如果您正在执行类似int** p = new int*[1]
,即使用new
创建指针。 然后,您将需要delete p
。
如果要创建指针,例如int* p = new int[size];
(这可能是您想要的),那么p
本身就在堆栈上 ,这意味着您不必担心内存的重新分配,但是p
指向的数组在堆上 ,这意味着您需要在以下位置进行分配:一点。
指针是普通变量。 不会以任何特殊方式处理它们。 指针变量和整数变量在这方面没有区别,因为指针数组和整数数组在这方面没有区别。
语言中所有变量的内存管理完全取决于您。 如果声明局部变量,则当控制超出其范围时,它将被自动销毁。 如果动态分配/创建对象,则必须显式取消分配/销毁它们。 等等。 指针绝对没有什么特别的。 它们就像其他任何变量一样。
基本上,您不清楚为什么还要问这个问题,因为您的问题似乎没有解决。 您能否提供一个导致您提出此问题的示例?
指针只保存地址,就像“ int”保存整数一样。 如果您有一个整数数组,而您正在使用基于它的变异数组,则摆脱了变异数组,原始数组将保持不变; 这里真的没有什么不同。
变异数组中的值会消失,但是由于它们是副本(无论它们是整数,指针还是其他对象),因此不会影响原始值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.