精华内容
下载资源
问答
  • 人说exit()并不一定就能让程序结束,因为可以使用因为可以使用register_shutdown_function注册一个或多个exit之后才执行的函数,并且还有对象的析构函数也会在exit之后执行。但是die()一定能结束程序。这...

    PHP函数die()与exit()的真正区别

    网上搜索die与exit两个函数的区别,大部分的”标准答案”都是说die是退出并释放内存,exit是退出但不释放内存。

    还有人说exit()并不一定就能让程序结束,因为可以使用因为可以使用register_shutdown_function注册一个或多个exit之后才执行的函数,并且还有对象的析构函数也会在exit之后执行。但是die()一定能结束程序。

    这个问题PHP官方给的答案是两个函数作用等同。

    “die — Equivalent to exit().This language construct is equivalent to exit(). ”两者只是别名关系,除此之外完全一样。

    不过我还是很好奇,决定从源码中找找线索,看看php是如何处理的这个“别名”。

    首先要清楚一点,die和exit都是”language construct”而非函数,网上也有很多说某某某有返回值是函数,某某无返回值是结构,很多初学者总搞不清语言结构和函数的区别,用通俗点的话讲,语言结构可以理解为语法本身的一种标识。像+、-、*、/这些也都是语言结构,if、else、for、while,这些都是语言结构。是语法本身的一部分。任何语言都会有这些东西,因为计算机看到+不会认为是应该做加法的。这需要编译器转换为机器码也就是cpu能够识别的指令集。

    php执行源码时的整个过程为,首先按照zend_language_scanner.l中定义的,将源码中的echo、if之类的语言结构转换成类似的T_ECHO、T_IF这些token,并且会去掉源码中的空格,注释这些与程序逻辑无关的字符。,就形成了一些简短的.表达式,这就是词法分析阶段。然后会按照zend_vm_opcodes.h中定义的,将这些token转换为op code。然后一条一行的执行这些op code。

    上面大概解释了php的编译和执行的过程,以及语言结构的定义。下面进入正题。

    我们也应该记得,php中有很多别名函数,比如:implode和join。无论是别名函数还是别名语言结构,从实际效果角度讲,都是一样的,不过源码的处理方式肯定还是不一样的。

    我们先看看这个别名语言结构是如何处理的,稍后再看别名函数。

    zend_language_parser.c中,定义了一个宏

    #define T_EXIT 300

    还定义了一个enum,里面也有

    enum yytokentype {

    T_EXIT = 300,

    ….

    }

    这里告诉我们,T_EXIT这个token,它的code是300。

    再看zend_language_scanner.l,其中有这么几行代码。

    ”exit” {

    return T_EXIT;

    }

    ”die” {

    return T_EXIT;

    }

    很明显,php做词法分析时,无论遇到exit还是die,都会返回T_EXIT这个token。从这里就可以证明,die和exit,再php内部处理是完全一样的。

    也可以用下列php代码来确定:

    ”));

    返回的结果中die和exit对应的token code,都是300。

    现在关于die和exit的问题,我想大家应该可以确定了,只是名字不同,效果都是一样的,没有所谓的卸不卸载内存的问题。

    【PHP函数die()与exit()的真正区别】相关文章:

    展开全文
  • 在C++中,采用基类的指针去指向派生类的对象是常见的用法,...答案是,构造函数不能成为虚函数,但析构函数可以。 1、构造函数为什么不能成为虚函数 这里比较详细和全面的解释: http://www.cnblogs.com
    展开全文
  • ◆如何对析构函数中对象进行释放◆ 16 ◆如何关闭一模态窗口◆ 17 ◆如何将一提示的声音发到声卡上◆ 17 ◆如何得到打开exe的带的参数◆ 17 ◆如何在框架上建立一工具条◆ 17 ◆如何生成一主窗口下方的状态...
  • 程序设计 C++ 语言期中考试试题 班级 _ 学号 _ 姓名 _ 一简答题每小题 4 分共 20 分 virtual Shape(const Shape; } 1. 在 C++ 中声明类时如何做到多个实例共享一 三程序... 什么是抽象类析构函数可以声时为虚函数 { 吗
  • 深信服一面

    2020-04-22 22:30:06
    自我介绍,介绍自己实习经历,然后打断我直接问我项目相关问题。 项目介绍不是很清楚,算法推荐介绍得重新理一下,说话太快,别急。 1.C++虚函数作用?虚函数父类做了很功能,有些做不...5.析构函数是干什么的?...

    自我介绍,介绍自己实习经历,然后打断我直接问我项目相关问题。

    项目介绍不是很清楚,算法推荐介绍得重新理一下,说话太快,别急。

    1.C++虚函数作用?虚函数父类做了很多功能,有些做不了-》需要子类实现

    2.虚函数与纯虚函数区别

    3.纯虚函数父类可以实现纯虚函数吗?这个好像不可以

    4.纯虚函数跟虚函数在虚表里面放的是不是一样的,编译的时候有没有不一样?说的有点问题

    5.析构函数是干什么的?虚析构?虚析构紧张了,

    参考:https://www.cnblogs.com/chio/archive/2007/09/10/888260.html

    答:我们知道,为了能够正确的调用对象的析构函数,一般要求具有层次结构的顶级类定义其析构函数为虚函数。因为在delete一个抽象类指针时候,必须要通过虚函数找到真正的析构函数。如果析构函数不加virtual,delete pb只会执行Base的析构函数,而不是真正的Derived析构函数。
    因为不是virtual函数,所以调用的函数依赖于指向静态类型,即Base

     

    6.构造函数是什么?构造函数可以定义虚函数吗?不可以

    7.深拷贝浅拷贝?指针地址指向不一样

    8.一般情况下怎么实现深拷贝?两个对象怎么做深拷贝?这个没搞懂后来扯到strcpy去了,实际上搞错了实际上是开辟内存空间,然后。。。

    参考:https://www.cnblogs.com/bluetzar/articles/1223313.html

    答案:通过拷贝构造函数来完成整个复制过程的

    8.Strcpy会出现什么问题?有什么可以解决?

    参考:https://blog.csdn.net/punk_lover/article/details/19824499

    答:strcpy()函数将源字符串复制到缓冲区。没有指定要复制字符的具体数目。复制字符的数目直接取决于源字符串中的数目。如果源字符串碰巧来自用户输入,且没有专门限制其大小,则有可能会陷入大的麻烦中!

    解决办法:避免内部缓冲区溢出,realpath(),堆栈可以提供保护

    10.extern?函数引用?在C++里面引用C代码?extern C

    11.常用的C++代码内存错误?new了之后没有delete/野指针,指针指向空delete/free去删除他指针就会变空?说的不全

    参考:https://blog.csdn.net/qq_36570733/article/details/80043321

    12.结构体对齐?没说清楚。声明之后是编译器自动对齐还是?编译器自己做不需要我们开发人员去管?不用想太久,不就会不会就不会

    参考:https://zhuanlan.zhihu.com/p/26122273

    规则一:结构体中元素按照定义顺序依次置于内存中,但并不是紧密排列。从结构体首地址开始依次将元素放入内存时,元素会被放置在其自身对齐大小的整数倍地址上。

    规则二:如果结构体大小不是所有元素中最大对齐大小的整数倍,则结构体对齐到最大元素对齐大小的整数倍,填充空间放置到结构体末尾。

    规则三:基本数据类型的对齐大小为其自身的大小,结构体数据类型的对齐大小为其元素中最大对齐大小元素的对齐大小。

    13.常见的数据结构了解吗?哈希表?

    14.数组和链表的区别?查找效率高,插入删除很耗时间。链表插入删除简单查找效率低。

    15.key和value怎么实现?map实现?数据结构实现字典?红黑树/哈希表,介绍红黑树?没介绍清楚,得重新理解理解

    参考:https://www.cnblogs.com/skywang12345/p/3245399.html

    16.两种实现方式哈希表和红黑树有什么优略?map为什么用红黑树不用哈希?查找稳定?哈希表链表长问题冲突怎么解决?这个有点懵实际上记得但是紧张忘了,开放地址法,减少mod,细分

    17.排序问题,假设有一个文件有好几个T,给这个文件一组数排序?冒泡排序/堆排序,这个自己挖坑了,用代码实现,文件所有的树都建成节点?文件很大怎么排?数据存在内存里?后来给提示冒泡,才发现自己走错了。

    18.面试官跟我说考察的是了解问题思路,具体问题涉及的方法

    19.跟我说我基本功有问题,打扎实了,酌情考虑。

    20.面试结果啥时候出来,多跟hr沟通。

    总结:基础知识还是不是很牢固,然后说话有点快,说话慢点,真的说话比较急,得改!!!

     

    展开全文
  • 阿里一面

    2017-03-21 22:46:32
    2、将析构函数设置为虚函数的作用 3、const的主要用法,如果一成员函数设置为const,什么意义? 4、static成员变量在线程时是安全的吗? 5、内存对齐的意义?为什么可以提高效率 6、简述一下map的原理 7、...

    1、深拷贝和浅拷贝的区别

    2、将析构函数设置为虚函数的作用

    3、const的主要用法,如果一个成员函数设置为const,有什么意义?

    4、static成员变量在多线程时是安全的吗?

    5、内存对齐的意义?为什么可以提高效率

    6、简述一下map的原理

    7、vector存在哪里,它的增长机制是什么?频繁的改变其大小对内存有什么坏的影响

    8、tcp四次挥手的过程有一个wait_close是在哪里

    9、完全二叉树的特点

    10、new可以用free来释放吗?为什么

    11、合并两个有序链表的时间复杂度

    答:O(m+n)

    12、如何用两个队列建立一个栈

    13、快速查找算法

    14、如何看cpu的资源利用率情况

    15、怎么查看电脑的ip



    展开全文
  • 面试问题整理 2.20

    2021-02-19 20:50:31
    3.为什么析构函数是虚函数? 4.vector迭代器的作用 5.单例模式? 6.TCP为什么三次握手? 7.翻转链表m到n 1.给函数传char*和string的区别 2.动态库和静态库,运行时不想加载某个动态库的内容怎么办 3.说一下struct...
  • 高质量C++编程指南

    2012-03-08 19:40:54
    第9章 类的构造函数、析构函数与赋值函数 68 9.1 构造函数与析构函数的起源 68 9.2 构造函数的初始化表 69 9.3 构造和析构的次序 71 9.4 示例:类STRING的构造函数与析构函数 71 9.5 不要轻视拷贝构造函数与赋值函数...
  • 高质量C++编程指南.zip

    2013-09-26 16:46:18
    第9章 类的构造函数、析构函数与赋值函数 69 9.1 构造函数与析构函数的起源 69 9.2 构造函数的初始化表 70 9.3 构造和析构的次序 72 9.4 示例:类STRING的构造函数与析构函数 72 9.5 不要轻视拷贝构造函数与赋值函数...
  • 摩托罗拉C++面试题

    2009-08-19 19:52:41
    析构函数可以为纯虚函数。 10,拷贝构造函数相关问题,深拷贝,浅拷贝,临时对象等。 深拷贝意味着拷贝了资源和指针,而浅拷贝只是拷贝了指针,没有拷贝资源 这样使得两指针指向同一份资源,造成对同一份析构两次...
  • “,然后再再深入一点,“如果把析构函数标记为虚函数呢?”,要准确得出这些答案就得考查我们深厚的内力了。其实,我还是蛮喜欢这样写书风格的,层层深入,很能考查读者对某个知识点的掌握程度,然后再跟着作者再往...
  • 10.4 析构函数和delete运算符 156 10.4.1 默认析构函数 156 10.4.2 调用构造函数进行类型转换 157 10.5 浅层复制构造函数 158 10.6 深层复制构造函数 160 第11章 运算符重载 162 11.1 运算符重载 162 11.2 在...
  • 10.3.4 析构函数 10.3.5 改进Stock类 10.3.6 构造函数和析构函数小结 10.4 this指针 10.5 对象数组 10.6 类作用域 10.6.1 作用域为类的常量 10.6.2 作用域内枚举(C++11) 10.7 抽象数据类型 10.8 总结 ...
  • C++程序员面试宝典

    热门讨论 2013-04-01 13:36:19
    面试题107 构造函数与析构函数的调用时机 116 10.2 访问控制 118 面试题108 哪几种继承方式 118 面试题109 继承时访问级别如何变化 120 10.3 继承时的类作用域 121 面试题110 什么时候发生函数覆盖 121 面试题111 ...
  • 面试题107 构造函数与析构函数的调用时机 10.2 访问控制 面试题108 哪几种继承方式 面试题109 继承时访问级别如何变化 10.3 继承时的类作用域 面试题110 什么时候发生函数覆盖 面试题111 如何访问基类的成员 10.4 ...
  • 显然,由于同时在运行多个程序,所以每个进程不可能拥有全部内存。实际上,这些进程使用的是虚拟内存。 只是作为一个例子,让我们假定您的程序正在访问地址为 629 的内存。不过,虚拟内存系统不需要将其存储在位置...
  • Symbian OS C++高效编程

    2012-02-18 13:52:27
    OS的异常 102.1 异常退出函数 102.2 使用new(ELeave)进行基于堆的内存分配 122.3 构造函数与析构函数 132.4 使用异常退出函数 142.5 用TRAP和TRAPD捕获异常退出 152.6 LeaveScan 202.7 小结 21第3章...
  • Perl 实例精解(第三版).pdf

    热门讨论 2010-11-06 09:08:02
    13.2.6 析构函数和无用存储单元收集 13.3 继承 13.3.1 @ISA数组和调用方法 13.3.2 $AUTOLOAD,sub AUTOLOAD和UNIVERSAL 13.3.3 派生类 13.3.4 多重继承 13.3.5 面向对象术语--父方法 13.4 ...
  • 操作系统(内存管理)

    热门讨论 2009-09-20 12:55:25
    显然,由于同时在运行多个程序,所以每个进程不可能拥有全部内存。实际上,这些进程使用的是 虚拟内存。 只是作为一个例子,让我们假定您的程序正在访问地址为 629 的内存。不过,虚拟内存系统不需要将其存储在...
  • 26.1.1 构造函数与析构函数 297 26.1.2 成员函数及可见度控制 299 26.2 库和抽象数据类型 299 26.2.1 类型安全的链接(linkage) 299 26.2.2 命名空间 300 26.3 内存分配 302 26.4 按成员赋值(memberwise...
  • 面试题10:编写类String 的构造函数、析构函数和赋值函数 8.4 拷贝构造函数 面试题11:谈谈对拷贝构造函数和赋值运算符的认识 面试题12:写出当定义#define _INMAIN 0和不定义时代码打印结果 第9章 继承与多态 9.1 ...
  • 2-11 在一个for循环中,可以初始化多个变量吗?如何实现? 解: 在for循环设置条件的第一个";"前,用,分隔不同的赋值表达式。 例如: for (x = 0, y = 10; x ; x++, y++) 2-12 执行完下列语句后,n的值为多少? ...
  • VC++常用功能实例

    2010-01-25 23:28:46
    ◆如何对析构函数中对象进行释放◆ 16 ◆如何关闭一模态窗口◆ 17 ◆如何将一提示的声音发到声卡上◆ 17 ◆如何得到打开exe的带的参数◆ 17 ◆如何在框架上建立一工具条◆ 17 ◆如何生成一主窗口下方的状态...
  • 比如登陆可能在多个页面上,就可以做成用户控件,但是一个问题就是用户控件拖到不同级别的目录下后里面的图片等的相对路径会变得不准确,需要自已写方法调整. 3.什么叫应用程序域?什么是受管制的代码?什么是强...
  • 21天学通C++ (中文第五版)

    热门讨论 2010-06-23 16:57:03
    12.5.4 创建虚析构函数 12.5.5 虚复制构造函数 12.5.6 使用虚方法的代价 12.6 小结 12.7 问与答 12.8 作业 12.8.1 测验 12.8.2 练习 第13章 管理数组和字符串 13.1 什么是数组 13.1.1 访问数组元素 ...
  • 14.4.7 析构函数里的异常 332 14.5 不是错误的异常 333 14.6 异常的描述 334 14.6.1 对异常描述的检查 335 14.6.2 未预期的异常 336 14.6.3 异常的映射 336 14.7 未捕捉的异常 338 14.8 异常和效率 339 14.9...
  • 14.4.7 析构函数里的异常 332 14.5 不是错误的异常 333 14.6 异常的描述 334 14.6.1 对异常描述的检查 335 14.6.2 未预期的异常 336 14.6.3 异常的映射 336 14.7 未捕捉的异常 338 14.8 异常和效率 339 14.9...
  • C++程序设计语言(特别版)--源代码

    热门讨论 2012-04-23 07:33:51
    14.4.7 析构函数里的异常 332 14.5 不是错误的异常 333 14.6 异常的描述 334 14.6.1 对异常描述的检查 335 14.6.2 未预期的异常 336 14.6.3 异常的映射 336 14.7 未捕捉的异常 338 14.8 异常和效率 339 14.9...
  • c++ 面试题 总结

    2009-09-16 08:44:40
    段式管理:把主存分为一段一段的,每一段的空间又要比一页一页的空间小很,这种方法在空间利用率上又比页式管理高很,但是也另外一缺点。一程序片断可能会被分为几十段,这样很时间就会被浪费在计算每一...

空空如也

空空如也

1 2
收藏数 29
精华内容 11
关键字:

析构函数可以有多个吗