1.智能指针 C++中四种常见的指针:unique_ptr,shared_ptr,weak_ptr,以及C++中已经废弃的auto_ptr。 下面我们根据对象所有权以及对象生命周期分别对这4类进行讲解: 1.auto_ptr auto_ptr要求同时只能有一个指针指向同一个对象,如果有另外一个指针引用了对象,则当前指针引用会被强制抹除置为null_ptr。 模型如下: 案...
另外一点:C语言无法在参数中传递数组,一切数组在函数参数传递时退化为指针,因此如果没有指针,数组将无法通过函数参数传递。 还有一点,在C语言中函数是一个指针,如果没有指针,就无法定义C语言函数,无法使用和调用C语言函数,更无法将函数作为一个变量传递。——换句话说,没有指针,C语言将没有函数,一个没有函数的语...
智能指针是用法和行为类似于指针的类对象。 智能指针的底层对原始指针做了一定的封装。 智能指针除了像指针一样可以存储变量的地址,还提供了其他功能,比如可以管理动态内存分配,对引用进行计数等。 当智能指针所指向的变量离开了作用域或被重置时,智能指针会自动释放该变量所占用的堆内存资源。 至于为什么要引入智能指...
与引用计数型智能指针不同的,auto_ptr要求其对“裸”指针的完全占有性。也就是说一个”裸“指针不能同时被两个以上的auto_ptr所拥有。那么,在拷贝构造或赋值操作时,我们必须作特殊的处理来保证这个特性。auto_ptr的做法是“所有权转移”,即拷贝或赋值的源对象将失去对“裸”指针的所有权,所以,与一般拷贝构造函...
考虑以下带有普通指针的简单C ++代码。 使用智能指针,我们可以使指针以不需要显式调用delete的方式工作。智能指针是指针的包装类,带有*和->重载的运算符。智能指针类的对象看起来像一个指针,但是可以执行普通指针不喜欢自动销毁的许多事情(是的,我们不必显式使用delete),引用计数等等。
指针变量和指针常量 指针变量首先是一个变量,由于指针变量存储了某个变量的内存首地址,我们通常认为”指针变量指向了该变量“,但是在这个时刻指针变量pa指向变量a,下个时候可能不存储变量a的首地址,而是存储变量c的首地址,那么我们可以认为这个时候,pa不再指向a,而是指向c。请别嫌我啰嗦,为了帮助你理解,我是故意说...
1.智能指针能够自动释放所指的对象,也就是说智能指针能够更方便的管理指针对象的生命周期。 2.指针用于指向内存地址,而智能指针使用的是类模板。 3.智能指针是C++的抽象,有不同的实现(如std::unique_ptr、std::shared_ptr、std::weak_ptr等) 指针常量和常量指针和常量指针常量 ...
指针是一种保存变量地址的变量。 其实,指针类型,并不是单独存在的,而是由其他类型派生而成。也即“由引用类型T派生的指针类型称之为指向T的指针”。 由于指针类型是一个类型因此其也存在“指针类型”和“指针类型变量”以及“指针类型的值”。他们都常常被称为指针,但是分明说的是不同的事情,这一点十分容易造成...
1.一个元素的指针 2.数组的指针 3.函数指针 4.成员函数指针 5.模板函数 6.成员变量指针 7.虚函数指针 总结 PART Ⅱ 智能指针 1.unique 总结 2.shared_ptr 使用shared_ptr需要注意的问题 enable_shared_from_this 1.二次析构 2.weak_this_没有初始化就调用shared_from_this ...
weak_ptr的主要使用场景,一是用于探查是否内存空间是否有效,用户可以通过expired()或者lock()来检测数据的有效性,以避免空指针。二是可以用于打破循环引用。c++20中的原子智能指针 智能指针的计数器是线程安全,但是其指向的对象的不是线程安全的。如果需要多个线程操作,为了保证安全性,可以 1、直接调用 mutex 的 ...