#define SCOPEDPTR_SHAREDPTR_H #include <boost/make_shared.hpp> #include <utility> class SharedPtr { public: SharedPtr(boost::shared_ptr<int> p) : m_p(std::move(p)) {} void print(); private: boost::shared_ptr<int> m_p; }; #endif //SCOPEDPTR_SHAREDPTR_H 1. 2. 3. 4. 5....
2、use_count() 返回原生指针的引用计数 3、lock() 返回 shared_ptr,如果原生指针没有被释放,则返回一个非空的 shared_ptr,否则返回一个空的 shared_ptr 4、reset() 将本身置空 三、智能指针的最佳实践 以上只是智能指针的基本用法,但是真正上手实践的时候,却发现程序在不经意间崩溃了。踩过了几次坑后,很...
这是一个在使用 std::shared_ptr 时常见的问题。如果两个 std::shared_ptr 互相引用,形成一个循环,那么这两个 std::shared_ptr 所引用的对象就无法被正确释放。例如: struct Node { std::shared_ptr<Node> sibling; }; void foo() { std::shared_ptr<Node> node1(new Node); std::shared_ptr<Node...
由于单个资源可以有一个unique_ptr,因此不可能将一个unique_ptr复制到另一个资源。 shared_ptr shared_ptr是原始指针的容器。它是一个引用计数所有权模型,即它与shared_ptr的所有副本协作维护其包含的指针的引用计数。因此,每当一个新的指针指向资源时,计数器就会增加,而在调用对象的析构函数时,计数器就会减少。 ...
(void *ptr, void *meta) { (void) meta; struct BufferBody *ctx = ptr; if (ctx->buffer != NULL) free(ctx->buffer); } struct BufferBody *write_buffer(const char *bufbody, size_t init_body_len) { smart struct BufferBody *ctx = shared_ptr(struct BufferBody, { 0 }, callback_...
unique_ptr采用的策略就是,既然拷贝有问题,那么就直接禁止拷贝,这确实解决了悬空等问题,使得unique_ptr是一个独一无二的智能指针。 (写到这发现忘记创建新项目了,这里创建一个Test.cpp和SmartPtr.hpp(.h+.cpp,直接.h也行,都可以把函数的实现在里面实现。声明和定义分离只是为了保护源码) ...
STL 中的 auto _ ptr 是为了解决资源所有权问题而设计的,但它缺乏对引用号和数组的支持,不能用于 STL 容器中。Boost 库[3]提供的智能指针相对成熟,具有很高的实用价值。其中,shared _ ptr 是线程安全的,可以在 STL 容器中使用。具体例子的参考文献[3]。
我们都知道 C 语言中是没有智能指针概念的,因此在封装 C 适配层时需要将智能指针换行成 void* 类型指针,下面以 shared_ptr(string)共享智能指针为例进行介绍: 代码语言:cpp 复制 std::shared_ptr<std::string>&a_string;// std::shared_ptr 转 void*void*myData=(void*)a_string.get();// void* 转...
shared_ptr unique_ptr weak_ptr auto_ptr(被 C++11 弃用)Class shared_ptr 实现共享式拥有(shared ownership)概念。多个智能指针指向相同对象,该对象和其相关资源会在 “最后一个 reference 被销毁” 时被释放。为了在结构较复杂的情景中执行上述工作,标准库提供 weak_ptr、bad_weak_ptr 和 enable_shared_from_...
智能指针使用:shared_ptr、weak_ptr、unique_ptr等 一些关键字的作用:static、const、volatile、extern 四种类型转换:static_cast, dynamic_cast, const_cast, reinterpret_cast STL部分容器的实现原理,如 vector、deque、map、hashmap 模板特化、偏特化,萃取 traits 技巧 ...