回答
当您使用delete
你是不是删除指针,所以它没有什么区别它是否是一个堆栈指针或任何其他类型的指针。
当您使用delete
时,您正在删除指针指向的内存块。如果该块被分配了new
,那么它总是在堆上。 (如果不是用new
分配的,那么你不应该delete
它。)
尽管答案的基调是正确的,但所提供的示例非常不正确。通过同样的逻辑,'delete p'调用后'printf(“%d”,* p);'很可能会打印出相同的未改变的值(因为p是'int *'),所以它意味着'delete p'什么都不做? – SergeyA
@SergeyA我从我的答案中删除了这个例子,让你开心。 –
另一个角度是没有,你不得使用运营商delete
,因为你永远不应该在非库代码使用明火的指针。
在现代C++中,你的榜样应该是:
std::unique_ptr<User> p = std::make_unique<User>();
没有delete
和看不到new
。
注意:在这种情况下,颗粒,make_unique
可以代替new
怕疼,但由于在其他例子可能不是,这是一个很好的做法,自学 - make_unique
是使用功能。
- 1. 使用dwarf2获取堆栈指针的堆栈指针值
- 2. 如何操作MIPS代码并使用堆栈指针?
- 3. C++堆栈的共享指针删除元素
- 4. 即使在函数堆栈中,也必须删除指针吗?
- 5. ANDing堆栈指针
- 6. 堆栈指针VS应用
- 7. 堆栈帧和堆栈指针
- 8. 使用指针实现堆栈
- 9. 无效指针操作+调用栈
- 10. c + +删除指针
- 11. C - 传递和操作字符指针和指针指针
- 12. 基指针和堆栈指针
- 13. C++,堆栈和结构指针
- 14. C++中的指针和堆栈
- 15. 堆栈存储结构指针c
- 16. C++删除操作符
- 17. 汇编堆栈指针AVR
- 18. 堆栈指针和分割
- 19. 初始化堆栈指针
- 20. C++删除一个指针指针
- 21. 使用C++,如何获取msvc中堆栈指针的值X64
- 22. 堆栈中使用的C中的无效指针
- 23. 删除指针自动变量
- 24. C++堆栈/堆栈。为什么只有一个新操作员?
- 25. 使用堆栈删除二叉树
- 26. 堆损坏当删除指针
- 27. 使用void指针来推动泛型堆栈?
- 28. 使用指针指针数组来操作它指向的指针(C++)
- 29. 使用列表的堆栈操作
- 30. 使用swing的堆栈操作
总是'delete'用'new'分配的内容。指针在栈上,但它指向的对象不是。 'delete p;'会删除指向的对象,而不是指针本身。您可以使用['std :: unique_ptr'](http://en.cppreference.com/w/cpp/memory/unique_ptr)或['std :: shared_ptr'](http:// en。 cppreference.com/w/cpp/memory/shared_ptr)。 –
您并未删除指针。您正在删除已分配的动态内存。其地址碰巧存储在自动指针变量中的事实是无关紧要的。 –
'stack'标签用于数据结构'stack'。 C++作为一种语言不一定需要堆栈来存储具有自动存储持续时间的对象。 –