簡體   English   中英

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;

}

不,不用擔心! 您可以將指針視為與intdouble相同的方式進行管理(至少在內存方面)。 指針本身就像一個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.

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