C++_引用

2.1引用的基本使用

作用:引用

语法:数据类型 &别名 = 原名

例:

int a=10;

int &b =a;

则如果输出b则b=10.如果修改b则同时修改a。

2.2引用注意事项

1、引用必须初始化,int &b=a;这个就是初始化。不能int &b;

2、引用初始化后,引用别名就不能更改。例子:

int a=10;int c=20;

int &b=a; //引用a之后就不能引用c否则报错

int &b=c;//此时就会报错。因为之前已经引用a了,初始化后再次引用不对。

2.3引用做函数参数

作用:函数传参时,可以用利用引用技术使形参修饰实参,比指针更简单

优点:可以简化指针修饰实参

//值传递:形参不能改变实参
void mySwap01(int a,int b)
{
    int temp =a;
    a=b;
    b=temp;
}
//地址传递;指针形式。形参可以修改实参
void mySewap02(int *a,int *b)
{
int temp =*a;
*a=*b;
*b=temp;
}
//引用传递;形参也可以修饰实参。除指针外的修饰方式
void mySwap03(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}

2.4引用座位函数的返回值

作用:引用可以作为函数的返回值存在的

注意:最好不要返回形参,因为形参存放在栈区第一次调用后会被释放掉,第二次会成乱码。一般调用全区变量或者,static修饰的形参的全局变量。

// 正确调用方法
int& test()
{
    static int a=10;
    return a;
}
int main()
{
    
    int& ref=test(); //正确;ref是test的别名

//引用的函数返回值形式还可以做左值;
test()=100;//输入后全局变量a=test()=ref=100;    

}

2.5引用的本质

本质:引用的本质是在c++内部实现一个指针常量

讲解:

//如果计算机发现引用,编译器自动转化为 int* const ref=&a;
void func(int& ref)
{
    ref = 100; //ref是引用,自动转化为*ref=100;
}
int main()
{
    int a=10;
    int& ref=a;  //自动转化int* const ref=&a
    ref=100;  //自动转化为*ref=100
    func(a);    

    return 0;
}

2.6常值引用

作用:一般解决型参数误操作引用

则一般在引用前面加上const int &ref;则不会再修改别名的参数。

//例子。创建一个子函数
void func(const int &ref)
{
    //ref =100;这是语法错误,会出现佐治不能修改的报错。这样可以达到误操作的方式
    cout<<"打印="<<ref<,endl;   
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
shared_ptr循环引用是指多个shared_ptr实例互相引用,导致对象无法被释放的情况。shared_ptr采用引用计数的智能指针,可以指向同一个动态对象,并维护了一个共享的引用计数器。当多个shared_ptr实例相互引用时,它们的引用计数无法降为零,从而导致内存泄漏。 为了解决shared_ptr引起的循环引用问题,可以使用weak_ptr指针。weak_ptr是一种弱引用,不能单独使用,只能配合shared_ptr使用。相比之下,weak_ptr并不增加引用计数,它只是提供了对被共享对象的一个非拥有的引用。通过使用weak_ptr,可以打破shared_ptr之间的循环引用,使对象能够正释放。 在C++中,我们可以使用weak_ptr的lock()函数来获取一个可用的shared_ptr对象,从而访问被共享对象的成员函数和成员变量。weak_ptr没有重载*和->运算符,因此无法直接访问对象,但可以使用lock()函数来获取shared_ptr,并通过该shared_ptr来访问对象的成员。 通过使用weak_ptr解决shared_ptr循环引用问题,可以避免内存泄漏和资源占用过多的情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++11智能指针之weak_ptr详解](https://download.csdn.net/download/weixin_38740201/14841441)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C++ 智能指针的循环引用问题](https://blog.csdn.net/qq_28584889/article/details/88726324)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [C++智能指针(share_ptr)及其循环引用问题](https://blog.csdn.net/feikudai8460/article/details/104747490)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值