不拥有任何指针的shared_ptr称为空shared_ptr。不指向任何对象的shared_ptr称为 null shared_ptr,不应取消引用。请注意,空shared_ptr不一定是 null shared_ptr,null shared_ptr不一定是空shared_ptr。 shared_ptr对象通过运算符 * 和 -> 提供对它们所指向的对象的访问,从而复制有限的指针功能。出于安全原因,它们...
int* ptr = nullptr;//使用 nullptr 初始化指针 2. 检查指针是否为空 在解引用指针之前,总是检查它是否为空。 if(ptr !=nullptr) {//现在可以安全地使用 ptr} 3. 使用智能指针 C++11 引入了智能指针,如std::unique_ptr和std::shared_ptr,它们可以自动管理内存,并在尝试解引用空指针时提供更安全的操作。
首先,我们来谈谈auto_ptr。它类似于原始指针,可以访问类的public成员,并通过get()和reset()函数改变指向的对象。但是,它存在一些限制:避免将auto_ptr放入容器中,因为容器的赋值操作可能导致资源泄漏。判断是否为空时,应使用get()方法。接下来是unique_ptr。它是为了取代auto_ptr而生,C++11引入了...
shared_ptr 类模板中,提供了多种实用的构造函数,这里给读者列举了几个常用的构造函数(以构建指向 int 类型数据的智能指针为例)。 1) 通过如下 2 种方式,可以构造出 shared_ptr 类型的空智能指针: 注意,空的 shared_ptr 指针,其初始引用计数为 0,而不是 1。 2) 在构建 shared_ptr 智能指针,也可以明确其...
shared_ptr 空智能指针,可以指向类型为T的对象 p 将p用作一个条件判断,若p指向一个对象,则为true *p 解引用p,获得它指向的对象 p->mem 等价于(*p).mem p.get() 返回p中保存的指针。要小心使用,若智能指针释放了其对象,返回的指针所指向的对象也就消失了 swap(p, q)或p.swap(q) 交换p和q中的指针...
判断一个智能指针是否为空不能使用if(ptest == NULL),应该使用if(ptest.get() == NULL),如下代码 int main() { auto_ptr<Test> ptest(new Test("123")); auto_ptr<Test> ptest2(new Test("456")); ptest2 = ptest; ptest2->print();...
weak_ptr 是 shared_ptr 的观察员。它不会干扰shared_ptr所共享的所有权。当一个被weak_ptr所观察的 shared_ptr 要释放它的资源时,它会把相关的 weak_ptr的指针设为空。这防止了 weak_ptr 持有悬空的指针。 这是C++中的概念,在C中,子对象持有父对象的weak_ptr,相当于持有父指针的地址,即指向父指针的指针...
(3)auto关键字 用于定义变量,编译器可以自动判断的类型(前提:定义一个变量时对其进行初始化)(4)decltype 求表达式的类型(5)智能指针 shared_ptr(6)空指针 nullptr(原来NULL)(7)基于范围的for循环(8)右值引用和move语义 让程序员有意识减少进行深拷贝操作 标准库扩充(往STL里新加进一些模板类,比较好用)(9)无...
shared_ptr采用引用计数的方式管理所指向的对象。当有一个新的shared_ptr指向同一个对象时(复制shared_ptr等),引用计数加1。当shared_ptr离开作用域时,引用计数减1。当引用计数为0时,释放所管理的内存。 这样做的好处在于解放了程序员手动释放内存的压力。之前,为了处理程序中的异常情况,往往需要将指针手动封装到类...
"<<std::endl;return-1;}returnstack[top];// 返回栈顶元素}boolisEmpty(){return(top<0);// 判断栈是否为空}boolisFull(){return(top>=MAX_SIZE-1);// 判断栈是否已满}};intmain(){Stack stack;stack.push(1);stack.push(2);stack.push(3);std::cout<<"Top element: "<<stack.topElement...