C++面试高频(一)

C++面试高频(一)

1.new和malloc的区别(使用和原理)

new的定义:

new是C++的关键字,用于动态分配内存并创建对象。它可以根据类型自动计算所需内存空间,并调用对象的构造函数进行初始化。在使用new分配内存后,需要使用delete来释放这些内存空间,以防止内存泄漏。

malloc的定义:

malloc是C语言的库函数,用于动态分配一块指定大小的内存块,并返回其地址。需要注意的是,使用malloc分配内存后,需要使用free来释放这些内存空间,以防止内存泄漏。

new与malloc的区别:(简单理解)

语法:new是C++的关键字,而malloc是C语言的库函数。

类型安全:new操作符会根据类型自动计算所需内存大小,并进行类型匹配,返回的是对象类型指针;而malloc需要手动计算内存大小,并使用强制类型转换,返回的是void指针。

构造函数与析构函数的调用:new会自动调用对象的构造函数进行初始化,而malloc不会调用构造函数,得到的内存空间内容是未初始化的。

内存泄漏的检测:new可以通过异常机制检测内存分配失败,而malloc在分配失败时返回NULL,需要手动检查。

重载和自定义类型:new操作符可以重载,并能够与自定义类型的构造函数和析构函数配合使用;而malloc是库函数,不会调用自定义类型的构造和析构函数

new与malloc使用区别

#include <iostream>

#include <cstdlib>

int main() {

    // 使用new进行动态内存分配和释放

    int* newPtr = new int(10);

    std::cout << "Value allocated with new: " << *newPtr << std::endl;

    delete newPtr;

    // 使用malloc进行内存分配和释放

    int* mallocPtr = (int*)malloc(sizeof(int));

    if (mallocPtr != nullptr) {

        *mallocPtr = 20;

        std::cout << "Value allocated with malloc: " << *mallocPtr << std::endl;

        free(mallocPtr);

    }

    return 0;

}

2.struct和class的区别

  1. 默认访问权限:struct中的成员默认为公共(public),而class中的成员默认为私有(private)。
  2. 默认继承方式:struct中的继承方式默认为公共(public),class中的继承方式默认为私有(private)。
  3. 使用习惯:struct适合用于简单的数据结构,class适合用于复杂的数据类型和实现面向对象编程。
  4. 成员变量和成员函数:struct中的成员变量和成员函数默认为公共,而class中的成员变量和成员函数默认为私有。
  5. 访问控制:struct中的成员在外部可直接访问,而class中的成员需要使用公共的成员函数来访问。
  6. 默认的构造函数和析构函数:class中会自动生成默认的构造函数和析构函数,而struct中不会。

3.char和int之间的转换

  1. 将char转换为int:可以直接将char类型的变量赋值给int类型的变量,将字符对应的ASCII码值赋给int变量。

char c = 'A';

int i = c;  // 将字符'A'的ASCII码值赋给i

2.将int转换为char:可以使用强制类型转换 (static_cast<char>) 将int类型的变量转换为char类型的变量,该方法只会截取int变量的低位字节作为字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值