不拥有任何指针的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;//使用...
注意,空的 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,相当于持有父指针的地址,即指向父指针的指针...
这是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...
而不是Fun(shared_ptr(new Widget),shared_ptr(new Widget)); 8,编译时候检查错误,而不是运行时候检查,这个时候就要多用静态断言取代运行时测试...10,积极使用const,常量很安全,在编译时会对其进行检查,但也避免将通过值传递的函数参数声明为const 11,尽量避免用宏定义,可以用const或enum定义易于理解的常量,用in...
关于shared_ptr的说法,错误的是:A.使用make_shared代替new生成shared_ptrB.同一个对象的指针,可以shared_ptr和原生指针混用。C