【无标题】

1. malloc 空间连续性(物理地址不连续),底层原理(blk)

new\delet  malloc\free 区别 底层原理,混用会出现什么情况

2. STL vector内存特点、扩容机制、扩容时数据的拷贝方式

map、list的数据结构

3.智能指针 哪几种,unique_ptr不支持直接赋值操作 需通过move转交权限,shared_ptr(引用计数) , weak_prt的作用 以及循环引用的情况举例。

多线程智能指针是否安全的,以及引用计数是否安全的。

4.类 多态如何实现的,虚函数、虚函数表、重载

5.设计模式:抽象工厂、观察者模式、单例模式(写代码)

6.gdb常用命令

7.ASAN 的一些配置操作有哪些,比如出错是否停止程序、是否开启内存泄漏检测

多线程智能指针是否安全的,以及引用计数是否安全的。

c++模板中的范式

跨平台移植代码,考虑的因素有哪些

c++11 中的 右值引用,移动构造函数 C++的移动构造和移动赋值运算符 - 知乎
【精选】C++ 移动构造函数详解_吾爱技术圈的博客-CSDN博客
【C++】右值引用(极详细版)_The s.k.y.的博客-CSDN博客

左值引用和右值引用的区别:

在 C++ 中,左值引用(lvalue reference)和右引用(rvalue reference)是引用类型的两种形式。

左值引用是对左值进行引用的类型。左值(lvalue)可以理解为具有身份的对象,它们有名称、地址,可以作为赋值操作的目标或者作为函数的参数。使用左值引用可以实现对象的共享和传递。

右值引用是对右值进行引用的类型。右值(rvalue)是临时的、匿名的、即将被销毁的对象。右值引用可以绑定到右值,通过移动语义(move semantics)可以高效地完成资源的转移或管理。右值引用常用于实现移动语义和完美转发(perfect forwarding)。

下面是一些示例来说明左值引用和右值引用的使用:

int a = 10; // a 是一个左值
int& lref = a; // 左值引用 lref 引用左值 a

int b = 20; // b 是一个左值
int&& rref = b; // 错误!不能将右值引用绑定到左值

int&& rref = 30; // 30 是一个右值

在这个示例中,a 和 b 是左值,因此可以使用左值引用进行引用。lref 是对 a 的引用,可以通过 lref 修改 a 的值。而 rref 是对右值 30 的引用,可以通过 rref 访问右值的内容。

需要注意的是,右值引用的主要用途之一是实现移动语义,通过 std::move 函数可以将左值转换为右值引用,从而实现资源的高效转移或管理:

std::vector vec1;
std::vector vec2;

// 使用移动语义将 vec1 中的元素转移到 vec2 中
vec2 = std::move(vec1);

在这个示例中,std::move 将 vec1 转换为右值引用,以实现将 vec1 中的元素高效地转移到 vec2 中。这避免了不必要的内存复制和分配。

你可能感兴趣的:(数据结构)