内存泄漏问题;删除指针 您所在的位置:网站首页 多级指针 内存泄漏问题;删除指针

内存泄漏问题;删除指针

2023-05-11 08:21| 来源: 网络整理| 查看: 265

delete的语法有点误导。当你写

T* ptr = /* ... */ delete ptr;

您是,而不是,删除变量ptr。相反,您正在删除ptr所指向的对象。ptr的值是不变的,它仍然指向以前的位置,所以在不重新分配它之前,您应该确保不取消它。

在重新分配指针之前,不需要对指针进行delete。但是,您应该确保,如果要重新分配指针的方式会导致您失去对被指向的对象的最后引用(例如,如果该指针是程序中指向其切入点的唯一指针),则应该对其进行delete,以确保不会泄漏内存。

许多C++程序员用于简化何时释放内存的逻辑的一种技术是使用智能指针,这些对象重载模拟指针所需的操作符,并且具有自动执行以帮助跟踪资源的自定义代码。例如,新的C++0x标准将为此目的提供shared_ptr和unique_ptr类型。shared_ptr的作用就像一个普通的指针,只不过它会跟踪有多少shared_ptr指向一个资源。当资源的最后一个shared_ptr更改它所指向的位置时(通过重新分配或销毁),它将释放该资源。例如:

{ shared_ptr myPtr(new int); *myPtr = 137; { shared_ptr myOtherPtr = myPtr; *myPtr = 42; } }

注意,在这段代码中,没有任何地方可以调用delete来匹配对new的调用!这是因为shared_ptr足够聪明,可以注意到最后一个指针何时停止指向资源。

在使用智能指针时,需要注意一些特性,但它们非常值得花时间学习。一旦您了解了它们的工作原理,就可以编写更干净的代码。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有