noexcept{returnblock_->weak_count.load();}private:structControlBlock{std::atomic<std::int64_t>count;std::atomic<std::int64_t>weak_count;T*ptr;};voidrelease()noexcept{block_->count.fetch_sub(1);if(block_->count<=0){if(block_->ptr){deleteblock_->ptr;block_->ptr=nullptr;}if(block_...
2. weak_ptr的实现 熟悉weak_ptr的朋友都知道,初始化一个weak_ptr是要用一个shared_ptr实例的,所以weak_ptr的构造函数接受一个shared_ptr对象: weak_ptr的lock方法能把weak_ptr提升为shared_ptr,陈硕老哥在他的书中还提到过,可以用这个lock方法来检测资源是否被销毁。贴一个在cppreference上关于lock方法的说明:...
cppreference.com 创建账户 页面 讨论 变换 查看 编辑 历史 std::shared_ptr C++ 内存管理库 std::shared_ptr 在标头<memory>定义 template<classT>classshared_ptr; (C++11 起) std::shared_ptr是一种通过指针保持对象共享所有权的智能指针。多个shared_ptr对象可持有同一对象。下列情况之一出现时销毁对象并解分...
DelFuncPtr = void (*)(T*) ; public: shared_ptr():m_ptr(nullptr), count_ptr( new size_t(0)),del(nullptr) { } explicit shared_ptr(T *ptr ,DelFuncPtr temp = nullptr ): m_ptr(ptr),count_ptr(new size_t(1)), del(temp ) { } //拷贝构造函数 shared_ptr(const shared_ptr &...
std::make_shared, std::make_shared_for_overwritezh.cppreference.com/w/cpp/memory/shared_ptr...
但是,不能将一个new表达式返回的指针赋值给shared_ptr。另外,特别需要注意的是,不要混用new和shared_ptr! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 voidprocess(shared_ptr<int> ptr) { cout<<"in process use_count:"<<ptr.use_count()<<endl; ...
void process(shared_ptr<int> ptr) { cout<<"in process use_count:"<<ptr.use_count()<<endl; } cout<<"don't mix shared_ptr and normal pointer:"<<endl; shared_ptr<int> p5(new int(1024)); process(p5); int v5 = *p5; cout<<"v5: "<<v5<<endl; ...
可以看下cppreference的描述:std::shared_ptr - cppreference.com shared_ptr中除了有一个指针,指向所...
std::shared_ptr<T>ptr_name; shared_ptr对象的初始化 我们可以使用以下方法初始化shared_ptr: 1. 使用新指针进行初始化 shared_ptr<T> ptr (new T()); shared_ptr<T> ptr = make_shared<T> (new T()); 2.使用现有Pointer进行初始化 shared_ptr<T> ptr(already_existing_pointer); ...
std::atomic对std::shared_ptr<T>的部分模板特化允许用户原子地操纵shared_ptr对象。 若多个执行线程不同步地同时访问同一std::shared_ptr对象,且任何这些访问使用了shared_ptr的非 const 成员函数,则将出现数据竞争,除非通过std::atomic<std::shared_ptr>>的实例进行所有访问(或通过从 C++20 起弃用的孤立函数对...