C++11在标准库的<memory>头文件中定义了三种类型的智能指针。1、unique_ptr 一个unique_ptr拥有它指向的对象的独占所有权,并且会在指针超出范围时销毁该对象。unique_ptr明确地阻止复制其包含的指针。不过可以使用std::move函数必须用于将包含的指针的所有权转移给另一个unique_ptr。示例代码 2、shared_ptr 引用计数...
typedef std::shared_ptr<Object>ObjectPtr;voidprint(ObjectPtr obj);voidprintRef(constObjectPtr&obj);voidinterfaceOfSharedPtr() { ObjectPtrnull; std::cout<<"ref count is"<<null.use_count() << std::endl;//0ObjectPtr obj(newObject(1)); std::cout<<"ref count is"<< obj.use_count() ...
值得一提的是,和 unique_ptr、weak_ptr 不同之处在于,多个 shared_ptr 智能指针可以共同使用同一块堆内存。并且,由于该类型智能指针在实现上采用的是引用计数机制,即便有一个 shared_ptr 指针放弃了堆内存的“使用权”(引用计数减 1),也不会影响其他指向同一堆内存的 shared_ptr 指针(只有引用计数为 0 时,堆...
std::shared_ptr<int> sPtr(new int(5)); std::weak_ptr<int> wPtr = sPtr; //weak_ptr不会改变shared_ptr,但是会和shared_ptr的引用保持一致 std::shared_ptr<int> sPtr2 = wPtr.lock(); //wPtr.lock()后会改变shared_ptr的引用计数(+1)...
std::shared_ptr<T> ptr2(ptr1); // 这就是使用复制构造函数的方法,引用计数加 1 shared_ptr 可以当作函数的参数传递,或者当作函数的返回值返回,这个时候其实也相当于使用复制构造函数。 过程如下:作函数实参时,将指针执行复制构造函数传入函数体内,因此该内存块的引用计数 1; ...
shared_ptr<double> sp_d = p_d; // 错误,隐式转换。 shared_ptr<double> sp_d(p_d); // 正确,显式转换。 1、auto_ptr 1)由C++98提出,C++11中已经弃用。 1 2 3 4 std::auto_ptr<int> sp_i1(new int); *sp_i1 = 10; std::auto_ptr<int> sp_i2 = sp_i1; // 所有权移交给sp...
C++11新特性之lambda:http://blog.jobbole.com/104548/ C++11新特性之容器相关特性:http://blog.jobbole.com/104563/ 这是C++11新特性介绍的第五部分,涉及到智能指针的相关内容(shared_ptr, unique_ptr, weak_ptr)。 不想看toy code的读者可以直接拉到文章最后看这部分的总结。
11、智能指针的 make_shared 和 make_unique 引入了std::make_shared和std::make_unique,更加方便地创建智能指针,减少了代码中的重复和出错的可能性。 autoptr = std::make_shared<int>(42);autouptr = std::make_unique<int>(42); 12、类型别名(Type Aliases) ...
shared_ptr weak_ptr 它们都在内存头文件中声明。 文章来源丨极客(geeksforGeeks) auto_ptr 从C ++ 11开始不推荐使用此类模板。unique_ptr是一种具有类似功能但具有改进的安全性的新功能。 auto_ptr是一个智能指针,用于管理通过新表达式获得的对象,并在销毁auto_ptr本身时删除该对象。
atomic<shared_ptr<T>>::is_lock_free bool is_lock_free() const noexcept; 若此类型所有对象上的原子操作为免锁则返回 true ,否则返回 false 。 atomic<shared_ptr<T>>::store void store(std::shared_ptr<T> desired, std::memory_order order = std::memory_order_seq_cst) noexcept; 如同用...