繁体   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