友元
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的逻辑,就是一个内存 被多个指针引用了,
如果是普通指针那么,最后可能会变为 不可访问的区域
- #include <iostream>
- #include <memory>
- using namespace std;
- class A
- {
- public:
- int i;
- A(int n):i(n) { };
- ~A() { cout << i << " " << "destructed" << endl; }
- };
- int main()
- {
- shared_ptr<A> sp1(new A(2)); //A(2)由sp1托管,
- shared_ptr<A> sp2(sp1); //A(2)同时交由sp2托管
- shared_ptr<A> sp3;
- sp3 = sp2; //A(2)同时交由sp3托管
- cout << sp1->i << "," << sp2->i <<"," << sp3->i << endl;
- A * p = sp3.get(); // get返回托管的指针,p 指向 A(2)
- cout << p->i << endl; //输出 2
- sp1.reset(new A(3)); // reset导致托管新的指针, 此时sp1托管A(3)
- sp2.reset(new A(4)); // sp2托管A(4)
- cout << sp1->i << endl; //输出 3
- sp3.reset(new A(5)); // sp3托管A(5),A(2)无人托管,被delete
- cout << "end" << endl;
- 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
本文引用 ,大佬的这篇写的不错。