首页 > 其他分享 >析构函数与 -O2 优化的一个问题

析构函数与 -O2 优化的一个问题

时间:2024-04-15 15:44:26浏览次数:29  
标签:begin 函数 nullptr 析构 itr O2

在赋值时,我们需要先对原有对象调用析构函数。

我的析构函数实现如下:

~vector() 
	{
		for(ptr* itr=begin_p;itr!=finish_p;itr++)
		{
			delete *itr;
		}
		delete[] begin_p;
		begin_p=nullptr;finish_p=nullptr;end_p=nullptr;
	}

不使用 -O2 优化,程序运行正常,调用完析构函数后 this->begin_p 被设为了 nullptr。但在使用 -O2 优化后,begin_p 在调用完析构函数后保留原值,并没有被设为 nullptr,导致 RE。

原因:

当调用析构函数时,可以视作该对象已经来到了生命末期,该对象不会在被使用。此时对于对象内部变量值的修改被视作没有意义的 UB 行为,在开 -O2 后会被优化掉。

标签:begin,函数,nullptr,析构,itr,O2
From: https://www.cnblogs.com/ss80194/p/18136092/stlite-hole1

相关文章

  • PHP strlen() 和mb_strlen()函数
    <?php   //测试时文件的编码方式要是UTF8   $str='中文a字1符';   echostrlen($str).'<br>';//14   echomb_strlen($str,'utf8').'<br>';//6   echomb_strlen($str,'gbk').'<br>';//8   echomb_s......
  • python-函数以及函数的返回值
    '''函数:把具有独立功能的代码块组合成一个个小模块作用:提高代码的效率,实现代码重复---流程标准化#可以在不同的地方多次调用,想要使用几次就使用几次,更加灵活,只需要调用,不需要重新定义'''#def函数名():#函数的定义#函数名需要复合标志符的命名规范(必须是字母,下划线,数......
  • 定义存储过程和函数
    定义存储过程和函数本文出处:https://www.modb.pro/db/222642学习地址https://www.modb.pro/course/133学习目标学习openGauss定义存储过程和函数课后作业1.创建带有入参和出参的函数1,调用函数时使用按参数值传递和命名标记法传参omm=#createfunctionfunc_multiply(......
  • 函数式编程思想 VS 可变性理论 20240415
    函数式编程(FunctionalProgramming,FP)是一种编程范式,它将计算视为数学函数的求值,并避免使用程序状态以及易变对象。函数式编程的核心思想包括:不可变性(Immutability):在函数式编程中,数据是不变的。一旦创建了一个数据结构,就不能再改变它。所有的操作都会产生新的数据结构。纯......
  • 函数的参数传递是值传递
    1.基本值,会直接将值传递给函数的参数2.引用值传递,是将引用值地址值传递给函数参数外界定义的a并没有被修改引用地址,说明参数传递进来的是地址值,如果参数是引用传递,那么外界的a应该被修改为a=此时值被改变,是直接操作了引用对象地址指向的内存空间,函数参数传递进......
  • 异步函数
    0.为什么使用异步因为js本身是单线程,如果所有的任务都是同步的,那么一些非常耗时的任务就会严重影响到用户体验1.回调函数constfs=require('fs');functionread(fileName){fs.readFile(fileName,'utf-8',(err,data)=>{if(err){console.log('err'......
  • httprunner 4.x学习 - 06辅助函数(debugtalk)的使用
    前言支持go语言和python语言写辅助函数debugtalk辅助函数在根目录编辑debugtalk.py文件写辅助函数实现自动化生成动态参数。 如下两个int相加和获取登录用用户名函数defsum_two_int(a:int,b:int)->int:returna+b defget_longin_name():retur......
  • 一行return 写一个递归函数! 20240414
    defmake_anonymous_factorial():returnlambdan:1ifn==0elsereduce(lambdax,y:x*y,range(1,n+1))这个函数make_anonymous_factorial的目的是创建并返回一个匿名函数(也称为lambda函数),该匿名函数能够计算一个给定非负整数n的阶乘。下面是对这个函数的详细......
  • 函数及指针
    c语言递归函数就是一个函数调用了函数本身要有一个明显结束的条件要有一个结束条件的趋势常用系统函数字符串函数标准库头文件<string.h>strlen(str)返回一个数组的长度(有元素的长度字符数组中的结束标识符不算)接收类型是size_tstrcpy(str,str1)将str1的字符串......
  • Redefine library-自定义函数库
    1.jjVolcano_Redefinelibrary(scRNAtoolVis)#jjVolcano只有9个颜色,Redefine到我的24个颜色,并与我umap中的分群颜色对应jjVolcano_Redefine<-function(diffData=NULL,myMarkers=NULL,order.by=c("avg_log2FC"),log2FC.cutoff=0.......