C++中的new的用法

C++基础 — new的使用 new的使用 阅读详情
Void TEncRCSeq::create( Int totalFrames, Int targetBitrate, Int frameRate, Int GOPSize, Int picWidth, Int picHeight, Int LCUWidth, Int LCUHeight, Int numberOfLevel, Bool useLCUSeparateModel, Int adaptiveBit )//Bool useLCUSeparateModel表示LCU的分割方式
{
  destroy();
  m_totalFrames         = totalFrames;//m表示类的数据成员,等号左边的为上面的函数定义的,等号右边的为该函数定义的
  m_targetRate          = targetBitrate;
  m_frameRate           = frameRate;
  m_GOPSize             = GOPSize;
  m_picWidth            = picWidth;
  m_picHeight           = picHeight;
  m_LCUWidth            = LCUWidth;
  m_LCUHeight           = LCUHeight;
  m_numberOfLevel       = numberOfLevel;
  m_useLCUSeparateModel = useLCUSeparateModel;

  m_numberOfPixel   = m_picWidth * m_picHeight;//像素数量
  m_targetBits      = (Int64)m_totalFrames * (Int64)m_targetRate / (Int64)m_frameRate;//总的目标比特????
  m_seqTargetBpp = (Double)m_targetRate / (Double)m_frameRate / (Double)m_numberOfPixel;//每像素分配的比特
  if ( m_seqTargetBpp < 0.03 )//根据目标分配比特数的等级不同分别给αβ赋予不同的值,用于更新λ来控制后面的码率控制
  {
    m_alphaUpdate = 0.01;//α为0.01
    m_betaUpdate = 0.005;//β为0.005
  }
  else if ( m_seqTargetBpp < 0.08 )
  {
    m_alphaUpdate = 0.05;
    m_betaUpdate  = 0.025;
  }
  else if ( m_seqTargetBpp < 0.2 )
  {
    m_alphaUpdate = 0.1;
    m_betaUpdate  = 0.05;
  }
  else if ( m_seqTargetBpp < 0.5 )
  {
    m_alphaUpdate = 0.2;
    m_betaUpdate  = 0.1;
  }
  else
  {
    m_alphaUpdate = 0.4;
    m_betaUpdate  = 0.2;
  }

  m_averageBits     = (Int)(m_targetBits / totalFrames);//每帧平均比特数
  Int picWidthInBU  = ( m_picWidth  % m_LCUWidth  ) == 0 ? m_picWidth  / m_LCUWidth  : m_picWidth  / m_LCUWidth  + 1;//
  Int picHeightInBU = ( m_picHeight % m_LCUHeight ) == 0 ? m_picHeight / m_LCUHeight : m_picHeight / m_LCUHeight + 1;
  m_numberOfLCU     = picWidthInBU * picHeightInBU;//CU的数量

  m_bitsRatio   = new Int[m_GOPSize];
  for ( Int i=0; i<m_GOPSize; i++ )
  {
    m_bitsRatio[i] = 1;//初始化整个GOP中的各帧的比特率都为1
  }

  m_GOPID2Level = new Int[m_GOPSize];
  for ( Int i=0; i<m_GOPSize; i++ )
  {
    m_GOPID2Level[i] = 1;//初始化整个GOP的各帧的层次都相同啊
  }

  m_picPara = new TRCParameter[m_numberOfLevel];
  for ( Int i=0; i<m_numberOfLevel; i++ )
  {
    m_picPara[i].m_alpha = 0.0;
    m_picPara[i].m_beta  = 0.0;
  }

  if ( m_useLCUSeparateModel )//
  {
    m_LCUPara = new TRCParameter*[m_numberOfLevel];
    for ( Int i=0; i<m_numberOfLevel; i++ )
    {
      m_LCUPara[i] = new TRCParameter[m_numberOfLCU];
      for ( Int j=0; j<m_numberOfLCU; j++)
      {
        m_LCUPara[i][j].m_alpha = 0.0;
        m_LCUPara[i][j].m_beta  = 0.0;
      }
    }
  }

  m_framesLeft = m_totalFrames;
  m_bitsLeft   = m_targetBits;
  m_adaptiveBit = adaptiveBit;
  m_lastLambda = 0.0;
}

这是HEVC中码率控制里面seq层的参数初始化(Void TEncRCSeq::create)的代码。在这段代码里面大量运用到了new这个表达式。
new:主要用来创建数组,也可以用来动态创建单个的对象。定义变量的时候需要指定其类型和名字,而动态创建对象时只需指定其数据类型,而不需要为该对象命名。取而代之的是,new表达式返回新的创建对象的指针,我们通过指针来访问对象。

int i;
int *pi=new int;

这个new表达式在自由存储区中分配创建了一个整型对象,并返回此对象的地址,并用该地址初始化指针pi。

m_bitsRatio   = new Int[m_GOPSize];
  for ( Int i=0; i<m_GOPSize; i++ )
  {
    m_bitsRatio[i] = 1;
  }

这段代码中,m_bitsRatio的定义就是指针变量,所以这里是用新创建的整型数组(大小为GOPsize)的地址来初始化该指针。(这里需要补习下指向数组的指针这块的内容)

m_GOPID2Level = new Int[m_GOPSize];
  for ( Int i=0; i<m_GOPSize; i++ )
  {
    m_GOPID2Level[i] = 1;
  }

这段代码的目的是初始化整个GOP中的每一帧的级别,用指针取出每一帧,并且将他们的层次定义为相同的值1。

C++中的new运算符:探索就地、普通和无抛异常new的用法 本文深入探讨了C++中标准提供的三种new运算符的变体:就地new、普通new和无抛异常的new,及其在特定类中的使用和重载。同时,分析了名称隐藏对全局new运算符的影响,以及如何在派生类中避免隐藏全局new运算符。... 阅读详情

相关推荐

操作系統恐龍書第十版課後答案CH10

課後

apple_72111807的博客 4047

【C++】C++中的new关键字用法详解

C++new用法详解

qq_35902025的博客 5万+

大模型学习路线之多模态模型

​ (Frankly speaking,博主太懒了)章节一只对CLIP、BLIP、BLIP2、InstructBLIP进行了整理,章节二以CLIP、VisualGLM作为实践案例。​ 实际上多模态模型除了CLIP、BLIP、BLIP2、InstructBLIP,还有LLaVA、miniGPT4,以及国内清华的VisualGLM、阿里的Qwen-VL等。(更多多模态原理可以看文末的参考说明)一、多模态模型 & 理论。

2401_86435672的博客 2294

C++:new的用法

虽然对象1及3的空间被回收,但对象1与3并未析构!这一点将时刻提醒我们使用定位new需要自己显式调用析构函数,完成对象的析构!显然,如果类动态地为其成员分配内存,这将引发问题!,所以,当我们使用定位new创建对象必须自己保证不会覆盖任何不想丢失的数据!new只申请内存空间,相当于malloc,delete相当于free。1.new operator(初始化对象=申请内存空间+内存定位)换句话说就是,现在空间已经有了,不需要。在已有的空间上调用构造函数构造对象而已。指向的对象位于内存缓冲区,该空间并不是。

qq_39200110的博客 1万+

十二、基于FPGA实现slave SelectMAP配置逻辑

slave SelectMAP配置

weixin_41838250的博客 8755

保姆级教程:在RK3568上搞定PR2100K+GC2385双摄(从DTS配置到HAL层补丁)

本文详细介绍了在RK3568平台上调试PR2100K+GC2385双摄系统的完整流程,从DTS配置到HAL层补丁。涵盖硬件连接、媒体控制器拓扑验证、Camera3配置、HAL层特殊补丁及性能优化等关键步骤,帮助开发者快速解决双摄调试中的常见问题,提升嵌入式视觉系统开发效率。

weixin_28724661的博客 197

c++ new的三种用法 【由基础到进阶 】

1.运算符 int * ip1 = new int[5]{1,2,3,4,5}; 1.先计算大小,为int类型,有5个则为20个字节 2.从内存中开辟20个字节空间大小 3.把这个空间初始化为1,2,3,4,5 4.把这个空间的地址赋值给ip1 2.函数 1.需要手动计算字节大小 2.没有办法初始化 3.返回的地址为void * 类型,需要自己手动强转 4. 3.定位new malloc 与new的区别? 1.new/delete是c++中的运算符,malloc/free是函数 2.malloc申请

aoeaoao的博客 1万+

《AI应用架构师:解锁AI智能体于经济学研究洞察经济趋势的关键密码》

当经济学家还在为“疫情后的消费复苏曲线”“ChatGPT对就业的长期影响”等非线性问题挠头时,AI应用架构师已经用AI智能体搭建了一个“数字经济沙盘”:里面有会砍价的消费者、会算成本的企业、会调政策的政府,每个智能体像真实角色一样思考决策,甚至能模拟出“政策出台3个月后失业率的微妙变化”。这篇文章将带你从架构师视角拆解:如何用AI智能体破解经济学研究的3大痛点(数据爆炸、非线性复杂、动态演化)?如何设计能“活起来”的经济智能体?如何用智能体模拟出能指导现实的经济趋势?

AI天才研究院 903

C++ new关键字详解

一.new的基本用法 1.c++通过new关键字进行动态分配内存。 2.new开辟的空间存储在堆上,而我们定义的变量存储在栈上。 3.new分配的空间使用delete释放,new[] 使用 delete[]。 4. int* pi = new int(5);//表示动态分配一个int ,初始化为 5 int* pa = new int[5];//表示动态分配一个数组,数组大小为5 ...

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 2万+

YOLOv10改进策略【模型轻量化】| MoblieNetV3:基于搜索技术和新颖架构设计的轻量型网络模型

本文记录的是基于MobileNet V3的YOLOv10目标检测轻量化改进方法研究。的模型结构是通过得来的,其中的基础模块结合了的深度可分离卷积、的线性瓶颈和倒置残差结构以及MnasNet中基于挤压和激励的轻量级注意力模块,使模型在性能、效率和灵活性方面都具有显著的优势。本文在替换骨干网络中配置了原论文中的small和large2种模型,以满足不同的需求。

Limiiiing的博客 515

头歌OpenGauss数据库-G.视图的使用

OpenGauss数据库-G.视图的使用

python一生之敌的博客 1386

C++中的new用法总结

C++中的new用法总结 前段时间复习面试的时候,看到这个问题经常有问到,我这个小白就看了些博客和书,总结一下。 new可以说是个一个关键字,也可以说是一个运算符,并且可以被重载。 1、new operator 这个就是平时最经常用的new,用法如下程序所示: 1 class A 2 { 3 public: 4 A(int i) :a(i){} 5 private: ...

cxu123321的博客 2491

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C++中的new和delete用法

new和delete是C++中用于申请/释放空间的函数,对应于C语言中的malloc和free。 实例: //普通变量 int *p = new int; delete int; //数组 int *p = new int[10]; delete [] p; 可以在申请空间时对变量进行初始化: int *p = new int(1); //*p = 1 int *p =

tastynoodle的专栏 637

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

new 在C++ 中的用法

我对C++一无所知 看参考手册 来看一下参考手册,总共有三种用法 下面是网站上给出的例子 // operator new example #include <iostream> // std::cout #include <new> // ::operator new struct MyClass { int data[100]; My...

weixin_30723433的博客 119

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【c++内存系列】三、c中的malloc,calloc,realloc,_alloca及c++中的new,new[]用法

一、c++中的new/delete, new []/delete [] 1. 基本格式: new/delete动态管理对象,new[]/delete[]动态管理对象数组。 因此new的作用就是: 调用operator new分配空间。 调用构造函数初始化对象。 delete作用 调用析构函数清理对象; 调用operator delete释放空间。 new[ ]的作用 调用operator...

zl3090的博客 477

c++中的new操作符定位用法(placement new) 的一个例子

c++中的new操作符有一种用法叫做定位(placement new) 用法如下: class A; char* area = new char[sizeof(A)]; A *a = new (area) A(1); delete a; 这种用法预先分配了内存,要创建一个对象时,直接把对象分配到这块内存上,节省了创建时间。 这种用法很好,但是在实际的运用的很少见。今天在一个stack

wwyyxx26的专栏 1851

deleted在c语言中的作用,c++中new和delete操作符用法

“new”是C++的一个关键字,同时也是操作符。当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,第二步就会被省略。new用法:1. 开辟单变量地址空间1)new int;开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋值给...

weixin_39682673的博客 424

new在c 语言中的用法,详解C++中new运算符和delete运算符的使用

C++ 支持使用 new 和 delete 运算符动态分配和释放对象。这些运算符为来自称为“自由存储”的池中的对象分配内存。 new 运算符调用特殊函数 operator new,delete 运算符调用特殊函数 operator delete。在 Visual C++ .NET 2002 中,标准 C++ 库中的 new 功能将支持 C++ 标准中指定的行为,如果内存分配失败,则会引发 std:...

weixin_42570769的博客 1855

C中的malloc/free与C++中的new/delete的用法与区别

1、先介绍malloc/free的用法: 原型函数: void *malloc(long NumBytes); 该函数分配了NumBytes个字节的内容,分配的空间是堆空间 malloc()根据用户所需分配内存的大小n (bytes)在“堆链表”(见未使用过得堆内存)里搜索。直到搜索到一个大于等于n字节的堆内存块为止。如果此堆内存块的大小刚好为n,则直接将首地址返回给用户;如果此内...

diandiao4618的博客 182

c++ new操作符

C++当中3种new的用法 | Fantacity 近在看侯捷侯老师的著作《STL源码剖析》,书中第二张开始讲到了stl中的allocator的一个简易实现,发现原来cpp中的new其实除了我们平常用的最多的new表达式(new operator)之外,还有剩下两种用法。 1. new operator/delete operator new operator,也叫new表达式,是我们在cpp中最常见的new的用法,比如: string *pStr = new string("abd")..

weixin_39187443的博客 5422

[C++] 关于new操作符的重载

关于c++ new操作符的重载 你知道c++ 的new操作符和operator new的区别么?也许你还会问,他们有区别吗? 当你写下面这样的代码时, string *pa = new string("memory managerment"); 你使用的是new操作符,这个操作符和sizeof一样,是c++语言级别支持的。你不能改变它的语义,它做的事情总是不变的:分配足够的内存以容纳对象,然后调...

selfsongs 5803
上一篇: 深度学习(deep learning)
下一篇: c/c++中空指针,空指针常量,NULL
yang-彧
博客等级 码龄12年 105粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值