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

C++ C++;:关于内存管理,指针本身是如何处理的?,c++,memory,pointers,memory-management,memory-leaks,C++,Memory,Pointers,Memory Management,Memory Leaks,我有一个相当简单的问题; 我有数组,其中包含指向对象的指针。我有时会从这些数组中创建变异数组,并且只在方法中使用它们。以后我不需要它们了。在这种情况下,我不希望在继续使用原始数组时销毁指向的数据。我不完全理解的是在我的临时数组中创建的指针(不是数据本身,而是指针)会发生什么?记忆是如何处理它们的。据我所知,指针只能指向一个地址。你不能“删除”它们 谁能给我更多的洞察力?一直以来,我都觉得自己的记忆力有问题 在本例中,列表是我的“包”,它是数组实现的对象包装器。但是,由于它包含索引之间的GAB,我

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

谁能给我更多的洞察力?一直以来,我都觉得自己的记忆力有问题

在本例中,列表是我的“包”,它是数组实现的对象包装器。但是,由于它包含索引之间的GAB,我使用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;

}
virtualvoidProcessEntities(artemis::ImmutableBag&bag)
{
artemis::Bag*list=(artemis::Bag*)this->world->getGroupManager()->getEntities(“人”);
if(list==nullptr)返回;//Kill函数
artemis::Bag*players=list->getGapless();
对于(int i=0;igetCount();i++)
{
对于(intj=i+1;jgetCount();j++)
{
如果(相交(*玩家->获取(i),*玩家->获取(j))){

std::coutno,别担心!您可以认为指针的管理方式与
int
s或
double
s相同(至少在内存方面)。指针本身就像一个
int
,恰好包含其他对象或对象数组的地址。一旦指针从作用域中消失,指针本身的内存将自动恢复

例外情况是,如果您正在执行类似于
int**p=new int*[1]
的操作,即使用
new
创建指针。那么您将在某个时候需要
删除p


如果您正在创建指针,如
int*p=newint[size];
(这可能是您想要的),那么
p
本身就在堆栈上,这意味着您不需要关心内存释放,但是数组
p
指向的是堆上的,这意味着您将需要在某个点上释放它。

不,别担心!您可以认为指针是以相同的方式管理的作为
int
s或
double
s(至少在内存方面)。指针本身就像
int
,恰好包含其他对象或对象数组的地址。一旦指针从作用域中消失,指针本身的内存将自动恢复

例外情况是,如果您正在执行类似于
int**p=new int*[1]
的操作,即使用
new
创建指针。那么您将在某个时候需要
删除p


如果您正在创建指针,如
int*p=newint[size];
(这可能是您想要的),那么
p
本身就在堆栈上,这意味着您不需要关心内存的释放,但是数组
p
指向的是堆上的,这意味着您将需要在某个点上释放它。

指针是普通变量。它们不以任何特殊方式处理指针变量和整数变量在这方面没有区别,因为指针数组和整数数组在这方面没有区别

语言中所有变量的内存管理完全由您决定。如果您声明一个局部变量,当控件超出其块时,它会自动销毁。如果您动态分配/创建对象,则必须显式取消分配/销毁它们。以此类推。指针绝对没有什么特殊之处。它们是就像其他变量一样


基本上,你问这个问题的原因还不清楚,因为你的问题似乎并不存在。你能举个例子说明是什么导致你问这个问题吗?

指针是普通变量。它们没有任何特殊的处理方式。指针变量和整数变量之间没有区别在这方面,指针数组和整数数组在这方面没有区别

语言中所有变量的内存管理完全由您决定。如果您声明一个局部变量,当控件超出其块时,它会自动销毁。如果您动态分配/创建对象,则必须显式取消分配/销毁它们。以此类推。指针绝对没有什么特殊之处。它们是就像其他变量一样


基本上,你甚至不清楚为什么要问这个问题,因为你的问题似乎并不存在。你能提供一个例子说明是什么原因导致你问这个问题吗?

指针只保存地址,就像“int”保存整数一样。如果你有一个int数组,而你使用的是基于数组的变异数组在它上面,然后去掉变异数组,原始数组保持不变;在这里它真的没有什么不同


变异数组中的值会消失,但因为它们是副本(不管它们是int还是指针或其他),它不会影响原始数组。

指针只保存地址,就像“int”保存整数一样。如果你有一个int数组,并且你使用了一个基于它的变异数组,那么去掉了变异数组,原始数组保持不变;在这里,它真的没有什么不同

变异数组中的值会消失,但因为它们是