面试之快速学习C++11-完美转发,nullptr, shared_ptr,unique_ptr,weak_ptr,shared_from_this

本文深入探讨了C++11中的关键特性,包括完美转发的概念及其在函数模板中的应用,讲解了引用折叠的原理。此外,详细介绍了 nullptr 作为初始化空指针的优势,以及其与NULL的区别。接着,讨论了三种智能指针shared_ptr、unique_ptr和weak_ptr的用法和区别,强调了它们在内存管理中的角色。最后,阐述了shared_from_this在多线程和智能指针管理中的应用场景及其潜在问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

完美转发及其实现

  1. 函数模版可以将自己的参数完美地转发给内部调用的其他函数。所谓完美,即不仅能准确地转发参数的值,还能保证被转发参数的左右值属性不变
  2. 引用折叠:如果任一引用为左值引用,则结果为左值引用,否则为右值引用。
& && -> &
&& & -> &
& & -> &
&& && -> &&
void actualRun(int a) {
   
    
}
template <typename T>
void testPerfectForward(T &&param) {
   
    actualRun(param);
}

void testPerfectForwardMain() {
   
    int a = 0;
    testPerfectForward(a);
}

上述 T 为int &。 那么整个为 int & &&-> int &

回到完美转发,假设现在我需要转发a,那么注意一下实现完美转发需要这样写


template <typename T>
void testPerfectForward1(T &&param) {
   
    actualRun(std::forward(param));
}

forward大致实现原理
static_cast + &&

template <typename T>
T&& forwad(T &param) {
   
    return static_cast<T&&>(param);
}

注意其实std::move底层实现也是 static_cast

C++11 nullptr:初始化空指针

  1. #define NULL 0
#include <iostream>
using namespace std;

void isnull(void *c){
   
    cout << "void*c" << endl;
}
void isnull(int n){
   
    cout << "int n" << endl;
}
void testNull1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值