首页 > 编程语言 >【Qt专栏】C++删除空指针

【Qt专栏】C++删除空指针

时间:2024-04-26 12:22:06浏览次数:23  
标签:NULL Qt pMyClass C++ char 专栏 删除 delete 指针

简短不看版:最佳实践

if(pMyClass)  //这里, pMyClass是指向某个类的指针 . .
{
    delete pMyClass ;
    pMyClass = NULL;  // 这句不能少
}

 

 

完全可以 . . . .

可能有不少人对Delete删除空指针的用法不屑一顾 , 但在实际运用当中 , 

却有不少人会犯类似的错误 , 最典型的如下:

if(pMyClass) //这里, pMyClass是指向某个类的指针 . .
{
   delete pMyClass ;
} 

 

他们往往先判断一下指针是否为空 , 如果不为空 , 说明没有被删除 , 

于是清空这个指针 . . .

出发点和逻辑思维是好的 , 但是却毫无必要 . . .

因为实际上delete 本身会自动检查对象是否为空 .如果为空 , 就不做操作 . . 

所以直接用delete pMyClass 就可以了 . . .

删除空指针当然也是同样道理 . .

注意:

1. delete NULL 是没有问题的

char *p = NULL;

delete p;

2:delete栈上的空间是不行的

char *p = "1234";

delete p;

2. delete两次不行

 char *p = new char;
   delete p;
   delete p;  // 不能删除两次,第一次delete p之后,p的地址并不是空,同一块内存释放两次是有问题的

3. 最好的风格是:

if(pMyClass)  //这里, pMyClass是指向某个类的指针 . .
{
    delete pMyClass ;
    pMyClass = NULL;  // 这句不能少
}


  因为这段代码在一个函数中,避免函数被调用两次而引起问题

标签:NULL,Qt,pMyClass,C++,char,专栏,删除,delete,指针
From: https://www.cnblogs.com/FBsharl/p/18159780

相关文章

  • C++内联函数
    内联函数关键字inline,inline是空间换时间,提高了程序效率但花费了更多空间。举个例子,下面是一段C语言代码:voidfun(inti){returni*2;}intmain(){inta=4;intb=fun(a);}假定以上C文件被编译器编译成的汇编代码如下:_f_int: addax,@sp[-8] ;相当......
  • 【Qt 专栏】QString::arg()函数
    原文链接:https://blog.csdn.net/Gnar_w/article/details/134966919作者:Gnar_w  (CSDN) 一、说明在QT的QString中,arg方法类似于C中的printf中使用的格式输出符(仅有些许类似)。二、使用有以下方式:使用arg(str1,str2,str3)这种方法进行替换。使用arg(str1).arg(str2).arg(......
  • qt封装dll并静态调用其它接口
    开发套件为QT5.9+MinGW编译器首先创建dll,第一步创建一个打开pro文件,因为我们创建的是app,需要的是dll,修改app->lib,注意不是dll其次,静态调用自己的底层库在工程中加入头文件,在pro添加dll的路径(注意这里静态调用没有用到lib文件)添加示例接口将编译的dll放入测试环境......
  • 【Qt 专栏】Qt:SQLite数据库操作示例
    转载自:https://blog.csdn.net/qq_40344790/article/details/129521573作者:DevFrank(CSDNC/C++ 优质创作者)1. sqlite介绍SQLite 是一种轻量级的嵌入式关系型数据库管理系统,它是一个开源的、零配置的、自包含的、事务性的SQL数据库引擎。SQLite的设计目标是简单、高效、可......
  • 编码技巧C++
    编码技巧C++非零都是true在c++环境下不等于0的数值都被认为是true在判断一个值是否为0时以下代码是等效的,但第一种效率更高inti=123;if(i)cout<<"i不为0";if(i!=0)cout<<"i不为0";不需要用到下标的计数循环可以不用for语句intn;cin>>n;while(n--){......
  • C++ 多级继承与多重继承:代码组织与灵活性的平衡
    C++多级继承多级继承是一种面向对象编程(OOP)特性,允许一个类从多个基类继承属性和方法。它使代码更易于组织和维护,并促进代码重用。多级继承的语法在C++中,使用:符号来指定继承关系。多级继承的语法如下:classDerivedClass:publicBaseClass1,publicBaseClass2,...{......
  • 设计带内存分配的C++类需要注意的几点
    初级内存管理:需要在构造函数中分配内存给ptr,并在析构函数中释放内存,以避免内存泄漏。MyClass::MyClass(){ptr=newint;}MyClass::~MyClass(){deleteptr;}深拷贝:如果您需要实现复制构造函数和赋值运算符重载,您需要进行深拷贝,以确保复制后的对象拥有独......
  • C++ 指针与引用的区别
    初学C++指针时,我误以为可以将指针视作对于原始对象的引用,当时还没有接触C++引用的概念,所以犯了概念上的错误,在此澄清一下这两者的区别。在形式上使用 *定义指针变量:int*p;定义的时候可以不初始化。使用& 定义引用:int&r=i;(其中i是另一个变量),定义引用的时候需要......
  • C++ 指针与引用的区别
    初学C++指针时,我误以为可以将指针视作对于原始对象的引用,当时还没有接触C++引用的概念,所以犯了概念上的错误,在此澄清一下这两者的区别。在形式上使用 *定义指针变量:int*p;定义的时候可以不初始化。使用& 定义引用:int&r=i;(其中i是另一个变量),定义引用的时候需要......
  • C++ 指针与引用的区别
    初学C++指针时,我误以为可以将指针视作对于原始对象的引用,当时还没有接触C++引用的概念,所以犯了概念上的错误,在此澄清一下这两者的区别。在形式上使用 *定义指针变量:int*p;定义的时候可以不初始化。使用& 定义引用:int&r=i;(其中i是另一个变量),定义引用的时候需要......