C/C++基础 (3)_c++的基础是什么

C/C++基础 (3)_c++的基础是什么

编码文章call10242025-02-08 9:52:5721A+A-

new和malloc的区别,各自底层实现原理

1、new是操作符,malloc是函数。

2、new在调用的时候先分配内存,再调用构造函数,释放的时候调用析构函数;malloc没有构造函数和析构函数。

3、malloc需要给定申请空间的大小,返回指针需要强转;new会调用构造函数,不用指定内存大小,返回指针不需强转。

4.new可以被重载,malloc不行。

5、new分配内存更直接和安全。

6、new发生错误会抛出异常,malloc会返回NULL;

malloc底层实现:

当开辟的空间小于 128K 时,调用 brk()函数 ;当开辟的空间大于 128K 时,调用mmap()。malloc采用的是内存池的管理方式,以减少内存碎片。先申请大块内存作为堆区,然后将堆区分为多个内存块。当用户申请内存时,直接从堆区分配一块合适的空闲快。采用隐式链表将所有空闲块,每一个空闲块记录了一个未分配的、连续的内存地址

new底层实现:

1、创建一个新对象。

2、将构造函数的作用域赋值给这个新的对象(因此this指向了这个新的对象)

3、执行构造函数中的代码(为这个新对象添加属性)

4、返回一个新对象。

说说const和define的区别

const用于定义常量;而define用于定义宏,而宏也可以用于定义常量。都用于常量定义时,它们的区别有:

1、const生效于编译阶段;define生效于处理阶段。

2、const定义的常量,在C语言中是存储在内存中、需要额外的内存空间的;define定义的常量,运行时是直接的操作数,并不会存放在内存中

3、const定义的常量是带类型的;define定义的常量不带类型。因此define定义的常量不利于类型检查

C++中函数指针和指针函数的区别

定义:指针函数本质是一个函数,其返回值为指针函数指针本质是一个指针,其指向一个函数

写法:

用例:


说说const int *a, int const *a, const int a, int *const a, const int *const a分别是什么,有什么特点

解析:


使用指针需要注意什么

1、定义指针时,先初始化为NULL;

2、用malloc或new申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值为NULL的内存;

3、不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用

4、避免数字或指针的下标越界,特别要当心发生“多1”或者“少1”操作

5、动态内存的申请与释放必须配对,防止内存泄漏

6、用free或delete释放了内存之后,立即将指针设置为NULL,防止“野指针”

简述C++有几种传值方式,之间的区别是什么

值传递、引用传递、指针传递

1、值传递形参即使在也函数体内值发生变化,不会影响实参的值。

2、引用传递形参在函数体内值发生变化,会影响实参的值。

3、指针传递在指针指向没有发生改变的前提下形参在函数体内值发生变化,会影响实参的值

说明:

值传递用于对象时,整个对象会拷贝一个副本,这样效率低;而引用传递用于对象时,不发生拷贝行为,只是绑定对象,更高效;指针传递同理,但不如引用传递安全。


简述const(星号)和(星号)const的区别


点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4