C++:关于内存管理的指针本身如何处理?

Sid*_*dar 1 c++ memory pointers memory-leaks memory-management

我有一个相当简单的问题; 我有包含指向对象的指针的数组.我有时会从这些数组中创建变异数组,并且只在方法中使用它们.向后我不需要它们.在这种情况下,我不希望在我继续使用原始数据时销毁指向的数据.我不完全理解的是在我的临时数组中创建的指针(不是数据本身,而是指针)会发生什么?内存如何处理它们.据我所知,指针只能指向一个地址.你不能"删除"它们.

谁可以给我更多的见解?这段时间我觉得我在做记忆错了.

在这种情况下,list是我的"bag",它是数组实现的对象包装器.但是,由于它包含索引之间的gabs,我使用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;

}
Run Code Online (Sandbox Code Playgroud)

hca*_*ver 5

不,不用担心!您可以将指针视为以与ints或doubles 相同的方式进行管理(至少在内存方面).指针本身就像int碰巧包含某些其他对象或对象数组的地址.一旦指针从范围中消失,指针本身的内存将自动恢复.

例外情况是,如果您正在做类似的事情int** p = new int*[1],即创建指针new.然后你会在某些时候需要delete p.

如果您正在创建指针int* p = new int[size];(可能是您想要的),那么p它本身就在堆栈中,这意味着您不需要关心内存释放,但是数组p指向堆上,这意味着你需要在某个时候解除分配.