我是否需要删除指向堆中指针的指针?
Do I need to delete pointer which pointing pointer in heap?
Class example
{
};
int main()
{
Example* pointer1 = new example();
Example* pointer2;
pointer2 = pointer1;
delete pointer1;
}
我应该删除pointer2吗?我认为它在堆栈中,我不需要删除。
删除指针是告诉操作系统程序不再需要该指针所在位置的内存。请记住,指针只是一个指向 RAM 中的整数。通过执行 pointer2 = pointer1
,您只是复制了整数,并没有移动任何内存。因此,通过删除第一个指针,因为第二个指针指向相同的位置,所以不需要删除它。
简答:否
pointer1
和 pointer2
都是存在于堆栈上的指针。 new Example
在堆上分配一个新的Example
类型的对象,其内存地址存放在pointer1
中。当您执行 delete pointer1
时,您正在释放在堆上分配的内存。由于 pointer1
和 pointer2
都在 delete
调用点引用相同的内存位置,因此不需要也是 delete
d,事实上,这将是未定义的行为,并可能导致堆损坏或只是您的程序崩溃。
最后,pointer1
和 pointer2
仍然指向同一个内存块,实际上都不是 nullptr
。
Class example
{
};
int main()
{
Example* pointer1 = new example();
Example* pointer2;
pointer2 = pointer1;
delete pointer1;
}
我应该删除pointer2吗?我认为它在堆栈中,我不需要删除。
删除指针是告诉操作系统程序不再需要该指针所在位置的内存。请记住,指针只是一个指向 RAM 中的整数。通过执行 pointer2 = pointer1
,您只是复制了整数,并没有移动任何内存。因此,通过删除第一个指针,因为第二个指针指向相同的位置,所以不需要删除它。
简答:否
pointer1
和 pointer2
都是存在于堆栈上的指针。 new Example
在堆上分配一个新的Example
类型的对象,其内存地址存放在pointer1
中。当您执行 delete pointer1
时,您正在释放在堆上分配的内存。由于 pointer1
和 pointer2
都在 delete
调用点引用相同的内存位置,因此不需要也是 delete
d,事实上,这将是未定义的行为,并可能导致堆损坏或只是您的程序崩溃。
最后,pointer1
和 pointer2
仍然指向同一个内存块,实际上都不是 nullptr
。