C++基础面试题, C++11
C++基础面试题, C++11
QA
Step 1
Q:: 解释C++
中的RAII是什么?
A:: RAII(Resource Acquisition Is Initialization)是一种C++
编程惯用法,确保在对象的生命周期内获取和释放资源。这意味着当对象被创建时,它会获取必要的资源,当对象销毁时,资源会被自动释放。RAII通过使用析构函数来管理资源,确保不发生内存泄漏或资源泄露。
Step 2
Q:: 什么是C++11
中的智能指针?有哪几种类型?
A:: 智能指针是一种自动管理动态分配内存的工具,防止内存泄漏。C++11
引入了三种类型的智能指针:std::unique_ptr
,std::shared_ptr
,以及std::weak_ptr
。std::unique_ptr
表示唯一所有权,一个对象只能由一个指针拥有;std::shared_ptr
表示共享所有权,可以有多个指针指向同一对象,并通过引用计数管理资源;std::weak_ptr
是一种不参与引用计数的智能指针,用于解决循环引用问题。
Step 3
Q:: 什么是C++11
中的lambda表达式?它有什么用?
A:: Lambda表达式是C++11引入的一种简洁的表示匿名函数的语法。它可以捕获所在作用域的变量,直接定义并内联一个函数,通常用于回调函数、短小的处理逻辑、或者代替std::
function对象。Lambda表达式提高了代码的可读性和简洁性。
Step 4
Q:: 在C++11
中,nullptr和NULL有什么区别?
A:: 在C++11
中,nullptr
是一个类型明确的空指针,它是std::nullptr_t
类型的常量。相比之下,NULL
通常被定义为整数常量0
,这可能导致类型不明确的问题。nullptr
可以有效避免与整型发生混淆,使代码更安全且更具可读性。
Step 5
Q:: C++
中的虚函数是什么?为什么要使用它?
A:: 虚函数是C++
中的一种允许子类重写父类中定义的方法的机制。通过在基类中声明一个函数为虚函数,子类可以在不改变基类接口的情况下提供其自己的实现。虚函数支持多态性,即使通过基类指针调用一个函数,运行时仍会执行子类的实现。