🌠 auto的使用细则 auto与指针和引用结合起来使用 用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须加& 代码语言:javascript 代码运行次数:0 运行 AI代码解释 intmain(){int x=10;auto a=&x;auto*b=&x;auto&c=x;cout<<typeid(a).name()<<endl;cout<<
引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体 没有NULL引用,但有NULL指针 在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占4个字节) 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小 有多级指...
2). 一个指针可以是volatile 吗?解释为什么。3). 下面的函数有什么错误:int square(volatile int *ptr){return *ptr * *ptr;}下面是答案:1). 是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。2). 是的。尽管这并不很常见。一个例子是...
可以看到,NULL可能被定义为字面常量0,或者被定义为无类型指针(void*)的常量。不论采取何种定义,在使用空值的指针时,都不可避免的会遇到一些麻烦,比如: 程序本意是想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0,因此与程序的初衷相悖。在C++98中,字面常量0既可以是一个整形数字,也可以是无类型...
如果指针是“独占”使用,就应该选择 unique_ptr,它为裸指针添加了很多限制,更加安全。 如果指针是“共享”使用,就应该选择shared_ptr,它的功能完善,用法几乎和原始指针一样。 shared_ptr 有少量的管理成本,也会引发一些难以排查的错误,所以不要过度使用。
智能指针应该保证:无论在何种情形下,只要自己被销毁,就一定要连带释放其所指向的资源。由于智能指针本身就是区域变量,所以无论是正常推出,还是异常推出,它都一定被销毁,auto_ptr正是这种指针。 auto_ptr是这样的一种指针: 它是"其所指向的对象"的拥有者。所以,当身为对象拥有者的auto_ptr被销毁时,该对象也将被...
Boost库的智能指针(ps:新的C++11标准中已经引入了unique_ptr/shared_ptr/weak_ptr): auto_ptr 独占所有权,转移所有权 第一种实现:最开始auto_ptr的成员变量主要有T* _ptr 和 bool _owner,主要实现原理是在构造对象时赋予其管理空间的所有权,在拷贝或赋值中转移空间的所有权,在析构函数中当_owner为true(拥有...
C++11中的四种智能指针 前言 C++ STL 提供了四种智能指针:auto_ptr、unique_ptr、shared_ptr 和 weak_ptr。其中auto_ptr 是 C++98 提供的解决方案,C+11 已将其摒弃,并提出了 unique_ptr 作为 auto_ptr 替代方案。虽然 auto_ptr 已被摒弃,但在实际项目中仍可使用,但建议使用较新的 unique_ptr,因为 unique...
auto在一行定义多个变量时,各个变量的推导不能产生二义性,否则编译失败auto不能用作函数参数可以使用valatile,*(指针类型说明符),&(引用类型说明符),&&(右值引用)来修饰auto关键字。在类中auto不能用作非静态成员变量auto不能定义数组,可以定义指针auto无法推导出模板参数使用auto关键字声明变量的类型,不...
weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象. 进行该对象的内存管理的是那个强引用的 shared_ptr. weak_ptr只是提供了对管理对象的一个访问手段。weak_ptr 设计的目的是为配合 shared_ptr 而引入的一种智能指针来协助 shared_ptr 工作, 它只可以从一个 shared_ptr 或另...