不拥有任何指针的shared_ptr称为空shared_ptr。不指向任何对象的shared_ptr称为 null shared_ptr,不应取消引用。请注意,空shared_ptr不一定是 null shared_ptr,null shared_ptr不一定是空shared_ptr。 shared_ptr对象通过运算符 * 和 -> 提供对它们所指向的对象的访问,从而复制有限的指针功能。出于安全原因,它们...
shared_ptr允许多个指针指向同一个对象;unique_ptr则“独占”所指向的对象。标准库还定义了一个名为weak_ptr的伴随类,它是一种弱引用,指向shared_ptr所管理的对象。这三种类型都定义在memory头文件中。 make_shared的标准库函数在动态内存中分配一个对象并初始化它,返回指向此对象的shared_ptr。与智能指针一样,ma...
shared_ptr<int> sp(newint(10));//一个指向整数的shared_ptrassert(sp.unique());//现在shared_ptr是指针的唯一持有者shared_ptr<int> sp2 = sp;//第二个shared_ptr,拷贝构造函数assert(sp == sp2 && sp.use_count() ==2);//两个shared_ptr相等,指向同一个对象,引用计数为2*sp2 =100;//使用...
在C++中,对于可能存在或不存在的变量,惯常的作法之一是传入指针 (包括现代C++中智能指针shared_ptr和unique_ptr),在处理时,通过检查指针是否为空来判断变量是否存在。这是一种非常便利的做法,但是同样的,此方案在编译期无法做更多的检查,最终检查的责任交给了开发。 Rust对此问题主要使用了两个机制:枚举(enum)和模式...
注意,空的 shared_ptr 指针,其初始引用计数为 0,而不是 1。 2) 在构建 shared_ptr 智能指针,也可以明确其指向。例如: 由此,我们就成功构建了一个 shared_ptr 智能指针,其指向一块存有 10 这个 int 类型数据的堆内存空间。 同时,C++11 标准中还提供了 std::make_shared 模板函数,其可以用于初始化 shared...
weak_ptr 是 shared_ptr 的观察员。它不会干扰shared_ptr所共享的所有权。当一个被weak_ptr所观察的 shared_ptr 要释放它的资源时,它会把相关的 weak_ptr的指针设为空。这防止了 weak_ptr 持有悬空的指针。 这是C++中的概念,在C中,子对象持有父对象的weak_ptr,相当于持有父指针的地址,即指向父指针的指针...
"<<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...
这是C++11新特性介绍的第五部分,涉及到智能指针的相关内容(shared_ptr, unique_ptr, weak_ptr)。 不想看toy code的读者可以直接拉到文章最后看这部分的总结。 shared_ptr shared_ptr 基本用法 shared_ptr采用引用计数的方式管理所指向的对象。当有一个新的shared_ptr指向同一个对象时(复制shared_ptr等),引用计...
std::shared_ptr<T> ptr; 这样构造的话,ptr 的意义就相当于一个 NULL 指针。当试图在一个空指针上做类似于 *ptr 或者 ptr->xx 之类的东西的时候,会出现异常错误 (2)直接从 new 操作符的返回值构造 std::shared_ptr<T> ptr(new T()); //引用计数加 1 ...
std::shared_ptr<Object> p1 = std::make_shared<Object>("foo"); std::shared_ptr<Object> p2(new Object("foo")); 许多google和stackoverflow帖子就在这里,但我无法理解为什么make_shared比直接使用更有效shared_ptr。 有人可以一步一步解释我创建的对象序列和两者所做的操作,这样我就能理解make_shared...