网站添加百度搜索,万维网中文网站到期,专业的团队网站建设,seo优化团队*放在哪里#xff1f;
如果声明一个变量#xff1a;int* b;
如果声明多个变量#xff1a;int a,*b,*c;
nullptr
c11中NULL的变形#xff0c;是一个特殊值#xff0c;可以赋给任意类型的指针#xff0c;代表该指针指向为空。
this指针
this指针不是一个const Test*(…*放在哪里
如果声明一个变量int* b;
如果声明多个变量int a,*b,*c;
nullptr
c11中NULL的变形是一个特殊值可以赋给任意类型的指针代表该指针指向为空。
this指针
this指针不是一个const Test*(常量指针)而是一个Test *const(指针常量/常指针)
类的成员函数尾部出现const修饰的是this指针形如返回值类型 函数名() const
成员函数隐含定义this指针接受调用对象的地址
1.若类成员函数的形参和类的属性名字相同通过this指针来解决,this可以指向对象本身。
类中成员变量叫做属性类中成员函数叫做方法。
2.类的成员函数可通过const修饰
函数指针
指向函数的指针
函数指针用于指向一个函数函数名是函数体的入口地址
声明定义 定义
通过函数类型定义函数指针
FuncType* pointer;
直接定义
type(*pointer)(parameter list);
pointer函数指针变量名
type指向函数的返回值类型
parameter list指向函数的参数类型列表 函数指针做函数参数
当函数指针作为函数的参数传递给一个被调用函数被调用函数就可以通过这个指针调用外部的函数这就形成了回调。 回调函数的优点
1.函数的调用和函数的实现有效的分离 2.类似C的多态,可扩展 现在这几个函数是在同一个文件当中int libfun(int (*pDis)(int a,int b)) 是一个库中的函数就只有使用回调了通过函数指针参数将外部函数地址传入来实现调用。 函数 add 的代码作了修改也不必改动库的代码就可以正常实现调用便于程序的维护和升级。
回调函数的本质
提前做了一个协议的约定把函数的参数、函数返回值提前约定。
解引用与智能指针
常规意义上讲new和malloc出来的堆上的空间都需要手动delete和free的。但在其它高级语言中只需要申请不需要释放的功能是存在的。
常规引用 广义智能指针
生命周期结束的时候自动销毁指向的数据然后释放空间
优点
1.不用手动释放空间 狭义智能指针
shared_ptr
shard_ptrint p1(new int(2));
shard_ptrint p2p1;
p2-use_count();//计数有多少个智能指针指向该空间
当计数为0时该空间销毁。先进行减少计数计数减少之后判断计数是否为0若为0则销毁该shard_ptrint空间先销毁数据再销毁空间
int *pnew int;//该操作会引发一个大的问题销毁时出现问题
shared_ptrint it(p);
shared_ptrint it2(p);//分别是两个计数计数钧为1it销毁的时候该空间销毁it2销毁的时候该空间再次销毁
shared_ptrint it3(it3);//计数变为2若只有it2,it3无it销毁遵循先减少后判断
不可作为返回值因为他会销毁自身数据然后销毁空间那么都销毁数据了还返回什么呢借助一下操作可解决该问题
class A :public std::enable_shared_from_thisA {
shared_ptrA self() {
return shared_from_this();
}
};
class A{
shard_ptrB i
}
class B{
shard_ptrA i
}
int main(){ A a;
B b;
a.ib;
b.ia;
}
错误操作不能相互指向这样的话在销毁a的时候会先销毁b;在销毁b的时候会先销毁a。
不能指向动态数组写一个函数删除器用于指定怎样进行析构即析构的时候调用该函数作为第二个参数
shared_ptr int[] p(new int[10]);
auto itmake_sharedint(100);
模板
void p(){}
shared_ptrint a(new int,p)//p类型是函数指针
weak_ptr
与shared_ptr配套使用相当于一个普通指针不会引发计数增加本身与shared_ptr无关
只能用shared_ptr与weak_ptr初始化
指向的对象不会被销毁只是自己被销毁
使用的时候会和一个shared_ptr有关系
use_count计数的是shared_ptr
expired返回weak_ptr指向的对象是否被释放
不能进行解引用/-lock()返回shared_ptr类型的指针其指向的对象与weak_ptr指向的对象相同
unique_ptr
类似于auto,但是一个指针只能指向一个空间多个指针指向同一个空间会报错
可以指向一个数组并且将其析构
unique_ptr int[] p(new int[10]);
模板
void p(){}
unique_ptrint,void(*)() p(new int,p)//p使用第二个模板参数作为类型
auto_ptr
auto_ptrint p1(new int(2));
auto_ptrint p2p1;
//p1和p2指向同一个空间在销毁其中一个的时候会先将该空间数据销毁再销毁该空间会使得剩下的一个指针变成野指针 自定义智能指针