阿里云C++二面面经

1.智能指针

1、shared_ptr

  • 原理:shared_ptr是基于引用计数的智能指针,用于管理动态分配的对象。无论 std::shared_ptr 存储在堆区还是栈区,它所指向的内存块始终存储在堆区。这是因为 std::shared_ptr 是用于管理动态分配的内存的智能指针,它需要存储在堆区,以便进行引用计数和自动释放内存
  • 使用场景:适用于多个智能指针需要共享同一块内存的情况。例如在多个对象之间共享某个资源。

2、 unique_ptr

  • 原理:unique_ptr是独占式智能指针,意味着他独占拥有所管理的对象,当其生命周期结束时,对象会自动销毁。
  • 使用场景:适用于不需要多个指针共享同一内存的情况,即单一所有权。通常用于动态分配的对象
    或文件句柄。

3、weak_ptr

  • 原理:weak_ptr是一种弱指针,他不增加引用计数。它通常用于协助shared_ptr,以避免循环引用问题。
  • 使用场景:适用于协助解决shared_ptr的循环引用问题,其中多个shared_ptr互相引用,会导致内存泄漏。

4、auto_ptr (已废弃)

  • 原理:std::auto_ptr是C++98标准引入的智能指针,用于独占地管理对象。但由于其存在潜在的问题,已在C++11中被废弃。
  • 使用场景:在C++98标准中,可用于独占性地管理动态分配的对象。不推荐在现代C++中使用。

2.栈和堆的区别

1、

你可能感兴趣的:(面经汇总,c++)