![](/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.