我有一个我调用的成员函数,从那里我得到一个指向类 BankAccount
的私有(private)成员的指针,我不确定当我释放它们时指针会发生什么。我创建了一个新的指针和堆内存地址,然后将指针分配给其他东西。 “删除”最终删除了什么?
我读到如果你删除一个指针
这是代码
void Employee::raise(){
BankAccount* tempBank = new BankAccount(); //set pointer to new heap place
double amt;
tempBank = get_bank(); // set pointer to existing heap implicitly
amt = tempBank->get_amount();
amt = (amt + (amt/12));
tempBank->set_amount(amt);
delete tempBank; //does this delete new heap created or does it add a new block of
//memory to heap since it is trying to delete a pointer assigned
//by memory address
tempBank = NULL;
}
我意识到我可以只执行下面的代码来避免这种情况,但现在我很好奇在上述情况下内存会发生什么
BankAccount* tempBank = get_bank();
那么在我原来的情况下调用 delete 时到底发生了什么?
最佳答案
当你使用delete ptr;
时,ptr
指向的对象被销毁,相应的内存返回给内存管理系统。变量 ptr
及其任何拷贝都包含一个指向现在无法访问的内存的位模式(系统可能仍然允许您实际访问该内存,它甚至可能仍然包含原始数据,但这是未定义的行为,您不应依赖它)。
换句话说,内存释放不会影响指针,但会影响指向的实体。在您的情况下,BankAccount
,即 *tempBank
的结果被销毁,而指针 tempBank
通过 delete< 保持不变
操作。显然,将 tempBank
设置为 NULL
确实会更改此特定指针,但不会更改其他拷贝(如果有),给您错误的安全感:我不会设置 删除
d 指向NULL
的指针,除非我出于某种原因保留它们...
关于c++ - 指针释放和堆内存,c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34038534/