C++11 record

友元

C++友元函数和友元类(C++ friend关键字) (biancheng.net)

参考

一般只有类的成员哈数访问 private 内容

如果声明为友元

那么它就可以 像成员一样访问private内容

class Student{
public:
    Student(char *name, int age, float score);
public:
    //friend void show(Student *pstu);  //将show()声明为友元函数
    friend  class ter;
private:
    char *m_name;
    int m_age;
    float m_score;
};
 
class ter
{
    void show(Student *pstu);
};
 
Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){ }
//非成员函数
void ter::show(Student *pstu){
    cout<<pstu->m_name<<"的年龄是 "<<pstu->m_age<<",成绩是 "<<pstu->m_score<<endl;
}

============================================

AUTO . 针对const 和  引用类型,会清出调前置修饰符

constexpr int  get (int a ,int b)

{

        return a+b 

}

逻辑就是 返回的值可以在CODE 中当作索引引用

比如

int  a[12]

a[get(1,2) //如果get 不加修饰 ERR .加了修饰这个值 编译器决定地址。就可以使用了,

原理 :这个关键字将变量引申为常量来用。

参考:这个写的不错

C++11关键字constexpr看这篇就够了_constexpr c++11_令狐掌门的博客-CSDN博客

智能指针

1.share_ptr 

场景:多个指针指向一块内存,导致数据混乱,野指针,多次释放,以及 内存泄漏问题

如果没有多个指针指向一块内存那么,可以不需要使用,share_ptr.

==============================================================

2.unique_ptr  

2个指针简单用法应该是一致的:

对new 出来对象的引用。不需要手动DELTE ,在share_ptr 指针生命周期消亡的时候

自动的delete,new出来的对象要直接的被share_ptr引用,而不是用普通的指针中转来与一发

这里有涉及到一个基础知识  对象的生命周期。

1.全局(如果share_ptr为全局那么这块内存 在进程退出前是不会消失的)

2.函数局部,(函数出去了就完了)

3.类对象内部 (对象消失了,)

2个指针语义很明确share 和unique 这个也好理解

独占和共享

独占肯定就是 只能我有,别人不能有,共享就是大家都可以有

下面找的这段CODE 比较真实的反应了 SHARE_PTR的逻辑,就是一个内存 被多个指针引用了,

如果是普通指针那么,最后可能会变为 不可访问的区域

  1. #include <iostream>
  2. #include <memory>
  3. using namespace std;
  4. class A
  5. {
  6. public:
  7. int i;
  8. A(int n):i(n) { };
  9. ~A() { cout << i << " " << "destructed" << endl; }
  10. };
  11. int main()
  12. {
  13. shared_ptr<A> sp1(new A(2)); //A(2)由sp1托管,
  14. shared_ptr<A> sp2(sp1); //A(2)同时交由sp2托管
  15. shared_ptr<A> sp3;
  16. sp3 = sp2; //A(2)同时交由sp3托管
  17. cout << sp1->i << "," << sp2->i <<"," << sp3->i << endl;
  18. A * p = sp3.get(); // get返回托管的指针,p 指向 A(2)
  19. cout << p->i << endl; //输出 2
  20. sp1.reset(new A(3)); // reset导致托管新的指针, 此时sp1托管A(3)
  21. sp2.reset(new A(4)); // sp2托管A(4)
  22. cout << sp1->i << endl; //输出 3
  23. sp3.reset(new A(5)); // sp3托管A(5),A(2)无人托管,被delete
  24. cout << "end" << endl;
  25. return 0;

======================================================================

针对uniq_ptr  独有性(不能CP构造函数和赋值函数) 

虽然两个unique_ptr不可以同时指向同一个内存对象,但是可以将一个即将销毁的unqie_ptr指针拷贝或赋值给另一个unqie_ptr

这句话是说,如果这个指针即将被销毁,但是被系统在管理,那么它,可以被托管给另外一个指针对象,类似于赋值 这样的

unique_ptr<int> clone(int p)
{
    return unique_ptr<int>(new int(p));
}
 
/*unique_ptr<int> clone(int p)
{
    unique_ptr<int> ret(new int(p));
    return ret;
}*/
int main()
{
    unique_ptr<int> p = clone(10);
    cout <<*p << endl; //打印10
    return 0;
}
————————————————
版权声明:本文为CSDN博主「写Bug那些事」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/CltCj/article/details/128058643

本文引用 ,大佬的这篇写的不错。

C++11 shared_ptr(智能指针)详解 (biancheng.net)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值