首页 > 其他分享 >phone call

phone call

时间:2023-10-09 23:14:25浏览次数:30  
标签:函数 对象 C++ phone call 内联 ptr 指针

1.CC++有什么区别?

C++是面向对象的语言,而C是面向过程的语言;

C++引入new/delete 运算符,取代了C中的malloc/free 库函数;

C++引入引用的概念,而C中没有; C++引入类的概念,而C中没有; C++引入函数重载的特性,而C中没有

 

2.static关键字有什么作用?

修饰局部变量时,使得该变量在静态存储区分配内存;只能在首次函数调用中进行首次初始化,之后的函数调 用不再进行初始化;其生命周期与程序相同,但其作用域为局部作用域,并不能一直被访问;

修饰全局变量时,使得该变量在静态存储区分配内存;在声明该变量的整个文件中都是可见的,而在文件外是 不可见的;

修饰函数时,在声明该函数的整个文件中都是可见的,而在文件外是不可见的,从而可以在多人协作时避免同 名的函数冲突;

修饰成员变量时,所有的对象都只维持一份拷贝,可以实现不同对象间的数据共享;不需要实例化对象即可访 问;不能在类内部初始化,一般在类外部初始化,并且初始化时不加static ;

修饰成员函数时,该函数不接受this 指针,只能访问类的静态成员;不需要实例化对象即可访问。

 

3.#defineconst有什么区别?

编译器处理方式不同: #define 宏是在预处理阶段展开,不能对宏定义进行调试,而const 常量是在编译阶段使用;

类型和安全检查不同: #define 宏没有类型,不做任何类型检查,仅仅是代码展开,可能产生边际效应等错

误,而const 常量有具体类型,在编译阶段会执行类型检查;

存储方式不同: #define 宏仅仅是代码展开,在多个地方进行字符串替换,不会分配内存,存储于程序的代码段中,而const 常量会分配内存,但只维持一份拷贝,存储于程序的数据段中。

定义域不同: #define 宏不受定义域限制,而const 常量只在定义域内有效。

 

4.对于一个频繁使用的短小函数,应该使用什么来实现?有什么优缺点?(内联函数)

应该使用inline 内联函数,即编译器将inline 内联函数内的代码替换到函数被调用的地方。优点:

在内联函数被调用的地方进行代码展开,省去函数调用的时间,从而提高程序运行效率;

相比于宏函数,内联函数在代码展开时,编译器会进行语法安全检查或数据类型转换,使用更加安全; 缺点:

代码膨胀,产生更多的开销;

如果内联函数内代码块的执行时间比调用时间长得多,那么效率的提升并没有那么大; 如果修改内联函数,那么所有调用该函数的代码文件都需要重新编译;

内联声明只是建议,是否内联由编译器决定,所以实际并不可控。

 

5.什么是智能指针?智能指针有什么作用?分为哪几种?各自有什么样的特点?

智能指针是一个RAII类模型,用于动态分配内存,其设计思想是将基本类型指针封装为(模板)类对象指针,并在 离开作用域时调用析构函数,使用delete 删除指针所指向的内存空间。

智能指针的作用是,能够处理内存泄漏问题和空悬指针问题。

分为auto_ptr 、 unique_ptr 、 shared_ptr 和weak_ptr 四种,各自的特点:

对于auto_ptr ,实现独占式拥有的概念,同一时间只能有一个智能指针可以指向该对象;但auto_ptr

在C++11中被摒弃,其主要问题在于:

对象所有权的转移,比如在函数传参过程中,对象所有权不会返还,从而存在潜在的内存崩溃问题; 不能指向数组,也不能作为STL容器的成员。

对于unique_ptr ,实现独占式拥有的概念,同一时间只能有一个智能指针可以指向该对象,因为无法进行拷贝构造和拷贝赋值,但是可以进行移动构造和移动赋值;

对于shared_ptr ,实现共享式拥有的概念,即多个智能指针可以指向相同的对象,该对象及相关资源会在其所指对象不再使用之后,自动释放与对象相关的资源;

对于weak_ptr ,解决shared_ptr 相互引用时,两个指针的引用计数永远不会下降为0,从而导致死锁问题。而weak_ptr 是对对象的一种弱引用,可以绑定到shared_ptr ,但不会增加对象的引用计数。

 

6、shared_ptr是如何实现的?

  1. 构造函数中计数初始化为1;
  2. 拷贝构造函数中计数值加1;
  3. 赋值运算符中,左边的对象引用计数减1,右边的对象引用计数加1;
  4. 析构函数中引用计数减1;
  5. 在赋值运算符和析构函数中,如果减1后为0,则调用delete 释放对象。

标签:函数,对象,C++,phone,call,内联,ptr,指针
From: https://www.cnblogs.com/synapse331/p/17753439.html

相关文章

  • Python | subprocess.call(c)返回值的意思
    subprocess.call(c)返回的是被调用命令的退出状态码(或返回码)。退出状态码是一个整数,通常表示命令执行的结果。通常情况下,返回值的含义如下:如果返回值为0:表示命令成功执行,没有错误。如果返回值非零:通常表示命令执行时发生了错误或出现了异常情况,返回值的具体值可能会有不同的......
  • QT之QWidget::paintEngine: Should no longer be called的解决办法
    这个还是以前遇到的,今天突然想起来,就决定重现一下当初的错误,以及错误的代码。报错是这个样子的:QWidget::paintEngine:ShouldnolongerbecalledQPainter::begin:Paintdevicereturnedengine==0,type:1其实这个原因很简单,来看看报错的代码:#include"mainwindow.h"......
  • 解决QWidget::paintEngine: Should no longer be called QPainter::begin: Paint devi
    标题问题同时在运行后会附带以下问题:QPainter::setPen:PainternotactiveQPainter::font:PainternotactiveQPainter::setFont:Painternotactive或QWidget::paintEngine:ShouldnolongerbecalledQPainter::begin:Paintdevicereturnedengine==0,type:1以......
  • Python程序调用图(Call Graph)
      vitsalis/PyCG:StaticPythoncallgraphgenerator(github.com)2103.00587.pdf(arxiv.org) PyCG-PracticalPythonCallGraphs PyCGgeneratescallgraphsforPythoncodeusingstaticanalysis.ItefficientlysupportsHigherorderfunctionsTwisted......
  • 多线程,实现Callable接口
    这里改变了之前Thread和Runnable接口的下载网络图片的代码是要下载器类的,下面并没有写出来一、实现Callable接口,重写call()方法  是需要返回值的      好处:可以设置返回值和可以抛出异常 二、与Thread和Runnable接口不一样的地方,是需要四部来开启线程的, Exe......
  • 深入了解iPhone 15 Pro内部结构和技术组件338500537、TPS6565780、338500843、SN300
    TechInsights团队正在拆解iPhone15Pro,以揭示其中的创新,包括使用台积电3nm工艺的全新A17芯片,提供了深入了解iPhone15Pro内部结构和技术组件。NXPNFC控制器安全元件SN300:(SN300VUK)Apple/Cirrus逻辑音频放大器338500537TiAMOLED显示器电源TPS6565780KIOXIA256GBNAND闪存App......
  • iPhone 15 Pro Max的Type-C接口有多牛?实测USB3比USB2快11倍
    苹果最新的iPhone15系列和iPhone15Pro系列新机,尽管两者都是Type-C接口,但速度相差20倍。据了解,iPhone15Pro/Max搭载的苹果A17Pro芯片内含专门的USB3模块,使其成第一款具备USB3速度的iPhone手机。有了这个模块,iPhone15Pro/Max的USB3比起iPhone15(A16芯片)的USB2来说,速度......
  • 选择华为Mate 60 Pro还是iPhone 15?
    根据提供的信息,我将对比华为Mate60Pro和iPhone15的一些关键参数进行总结,帮助你做出选择。品牌和操作系统:-华为Mate60Pro搭载了华为自家的操作系统HarmonyOS4.0。-iPhone15运行苹果的操作系统iOS17。2.CPU和性能:-Mate60Pro采用了华为自家的麒麟9000S六核中央处理器。-......
  • Python类的内置成员方法 __init__, __new__ 和 __call__
    __init__和__new__这个方法想必大家平常也用的很多,这个方法负责对象的初始化。什么是初始化呢?就是对已经存在的东西赋若干个初始值。所以我们可以知道当我们调用__init__()方法的时候,这个类已经被实例化了。我们可以运行一下如下代码classA():def__new__(cls,*ar......
  • 什么是 Customer Support 领域的 On Call 职责
    On-call职责和管理是现代企业中不可或缺的一部分,特别是对于外企来说。这个角色要求专业知识和高度的敬业精神,因为他们需要随时随地提供技术支持,确保客户的系统和服务始终保持正常运行。在本文中,我将详细介绍什么是On-call的职责,以及通过几个示例来说明这些职责是如何实际应用的......