c++ 指针 析构函数-c++中析构函数中的指针问题

问题描述

c++中析构函数中的指针问题
在c++一个类中的数据成员是指针。在这个类中的析构函数指针为什么要先删除。然后再定义成空指针?

解决方案

先删除主要是为了释放掉分配在堆的内存数据,防止内存泄漏,然后赋值为NULL主要是防止野指针导致程序崩溃,这样做体现出程序的健壮性,我用一个形象低俗的例子记住了这一点,把赋值为NULL想象成上完厕所记得擦屁股……这样程序就不会出现野指针了,因为野指针很大可能会是导致项目失败的关键

解决方案二:
因为这个指针是new出来的,如果不delete掉,会引起内存漏肉。
另外,设置 为Null防止出现野指针(指向不知道的地方)

解决方案三:
防止内存泄露否则机器会越来越慢的

解决方案四:
delete是释放new出来的堆上资源,否则会引起内存泄露。

解决方案五:
防止内存泄露,删除指针,防止成为野指针

解决方案六:
删除分配在堆的内存,之后再重新安全指定null ,如果不只是,可能会指向一些乱七八糟的地方

解决方案七:
谢谢各位的回答。理解了。

时间: 2024-09-11 02:32:15

c++ 指针 析构函数-c++中析构函数中的指针问题的相关文章

warning C4150: 删除指向不完整“XXX”类型的指针;没有调用析构函数

  情况源于我的之前一片博客<C++ 智能指针>,在我写demo代码的时候.   向前申明了class Phone, 然后再U_ptr类析构函数中delete Phone的指针. 出现warning C4150: 删除指向不完整"XXX"类型的指针:没有调用析构函数     这个waring会导致内存泄露.前向申明的类的析构函数没有被调用     出现warning的代码如下:   #include <iostream> using namespace std;

C++中的auto_ptr智能指针的作用及使用方法详解_C 语言

智能指针(auto_ptr) 这个名字听起来很酷是不是?其实auto_ptr 只是C++标准库提供的一个类模板,它与传统的new/delete控制内存相比有一定优势,但也有其局限.本文总结的8个问题足以涵盖auto_ptr的大部分内容.  auto_ptr是什么? auto_ptr 是C++标准库提供的类模板,auto_ptr对象通过初始化指向由new创建的动态内存,它是这块内存的拥有者,一块内存不能同时被分给两个拥有者.当auto_ptr对象生命周期结束时,其析构函数会将auto_ptr对象拥

Access中如何设定鼠标指针?

access|鼠标指针 Access中如何设定鼠标指针?   问题: 如何设定鼠标指针?   方法一: Private Declare Function alxSetCursor Lib "user32" Alias "SetCursor" (ByVal hCursor As Long) As Long'将指定的鼠标指针设为当前指针Private Declare Function alxGetCursor Lib "user32" Alias &

C语言中的数组和指针汇编代码分析实例

  这篇文章主要介绍了C语言中的数组和指针汇编代码分析实例,本文用一则C语言例子来得到对应的汇编代码,并一一注解每句汇编代码的含义,需要的朋友可以参考下 今天看<程序员面试宝典>时偶然看到讲数组和指针的存取效率,闲着无聊,就自己写了段小代码,简单分析一下C语言背后的汇编,可能很多人只注重C语言,但在实际应用当中,当出现问题时,有时候还是通过分析汇编代码能够解决问题.本文只是为初学者,大牛可以飘过~ C源代码如下: 代码如下: #include "stdafx.h" int

win7电脑中如何变换鼠标指针的图案?

  也许在很多用户的眼中,鼠标已经被"鼠标化"了,也就是说,大家眼中的鼠标图案就是一个小小的三角形,这个印象已经完全的刻画在了大脑里,似乎无法接受它的改变.是的,其实咱们在电脑中有很多东西是可以改变而我们却没有去选择改变的,而其中,鼠标指针便是其中之一,而今天小编要介绍的,便是如何在win7旗舰版中更改鼠标指针的图案. 1.首先,咱们返回到win7电脑的桌面位置,然后找到一个空白处点击右键,选择下滑菜单中的个性化选项. 2.在弹出来的窗口中,咱们找到并单击左侧的"更改鼠标指针

malloc-C语言中的字符指针操作问题,如何释放字符指针空间?

问题描述 C语言中的字符指针操作问题,如何释放字符指针空间? 源码如下: #include #include #include void main() { char s1; char *s2 = "bbb"; char *s3 = "ccc"; s1 = (char)malloc(sizeof(s2)); strcpy(s1, s2); strcat(s1, s3); //free(s2); //free(s3); printf("%s ", s

在线等ing-vector容器中传入类的指针,增加元素和遍历

问题描述 vector容器中传入类的指针,增加元素和遍历 我写下代码说明一下: class A{ public: A() { Pos = 0; WaitingPeople = 0; strName= """"; } ~A(){} private: size_t Pos; size_t WaitingPeople; string strName;}class B{private: vectorvecA;public: void Add(A* a) { vecA.pus

c-C 语言中返回结构体指针,结果出来了,但是还是出现错误,不知道为什么

问题描述 C 语言中返回结构体指针,结果出来了,但是还是出现错误,不知道为什么 解决方案 p 没有初始化,也就是没有分配空间.典型的指针错误,不初始化,指针指向哪里呢? 解决方案二: array *p = new array(); 解决方案三: array p;test(&p); 解决方案四: 当然,使用指针应该首先初始化一个空地址的,否则,很容易发生指针地址错误其次,看了一下你的程序设计,程序本身是定义了一个array的结构体变量,在主函数中却要申请一个指针变量p(它的类型是结构体),一系列操

在长度大于1的单循环链表中既无头结点也无头指针s为指向某个结点的指针编写算法删除结点*s的前驱结点

问题描述 在长度大于1的单循环链表中既无头结点也无头指针s为指向某个结点的指针编写算法删除结点*s的前驱结点 如链表中为(12345),用户输入1,则结果应为(1,234).这种情况实现不了,求大神解答 #includeusing namespace std;typedef struct LNode{ int data; struct LNode *next; }LNode*LinkList;void begin(LinkList &l){ l=new LNode; l->next=NULL