为什么返回一个临时对象的引用是不安全的

2021-08-25
阅读 1 分钟
1.7k
1.问题说明返回一个临时对象的引用是不安全的,因为当离开作用域,这个临时对象会马上析构,所以函数返回的总是悬挂引用(空悬引用),使用这个引用是一个未定义行为,会导致程序崩溃。2.问题分析看下面这段代码:

C++中析构函数为什么不允许抛出异常

2021-08-24
阅读 1 分钟
3.2k
1.问题本身:在语法上,C++允许在析构中抛出异常,但异常处理,本身就是为了处理构造失败的情况。当一个对象构造失败而抛出异常时,我们应当利用析构函数,清理无效对象,并回收其资源,这是使程序健壮的重要手段。2.问题分析:从1可知,构造函数显然是可以抛出异常的。进一步分析,在析构函数中抛出异常,会出现哪些情况...

#issue address of local may escape 局部变量逃逸

2021-08-24
阅读 1 分钟
1.6k
2.问题分析:将局部变量的地址托管给全局变量,本身就是不安全的。这会造成,被托管的地址的生命周期,比其所指的内容生命周期更长。而这,意味着,所指内容随时可能失效。当然,在main函数中如此做是安全的,只要将全局变量声明成static静态全局变量即可。3.问题解决:用new去声明和定义一个局部变量,而不是用栈。这意...

#issue pure virtual method called 虚函数调用段错误

2021-08-23
阅读 1 分钟
3.7k
1.问题描述:在做一个分布式存储的服务器。服务器在某些异常关闭的场景下,会在析构时,报错:pure virtual method called, terminate called without an active exception。服务器析构时,会调用下面这行代码:tx->Commit(); // std::shared_ptr<SeGhBacken> tx;其声明为:基类:

C/C++学习之路(一)校招后端面试题及答案(作者回忆版)

2020-04-14
阅读 3 分钟
1.3k
1.结构体对齐的问题 {代码...} (二)整个结构体的大小必须是最大字节的整数倍相关知识:计算机组成原理2.static关键字的解释 (一)在c语言中 {代码...} (二)在C++中 {代码...} 3.隐藏、覆盖与重载的区别 {代码...} 4.extern关键字解释 {代码...} 5.const关键字解释 {代码...} 6.内联函数与宏定义 {代码...} 7.左值和...

数据库系统学习笔记(一)

2020-04-13
阅读 1 分钟
1.1k
一.数据库名词解释:1.数据(data):描述事物的符号记录,是数据库中存储的基本对象。2.语义(semanteme):数据的含义,与数据密不可分。3.数据库(database):长期存储在计算机内,有组织可共享的大量数据集合。4.数据管理系统(DBMS):用户与操作系统之间的数据管理软件。5.数据库系统(DBS):在计算机系统中引入数...