std::shared_ptr<test> ptr_test = std::shared_ptr<test>(pTest); //普通指针转shared_ptr std::shared_ptr<test> ptr_test2 = std::make_shared<test>(); test* pTest2 = ptr_test2.get(); //shared_ptr转普通指针
1 struct test 2 { 3 int num; 4 string name; 5 }; 6 7 test* pTest = new test(); 8 std::shared_ptr<test> ptr_test = std::shared_ptr<test>(pTest); //普通指针转shared_ptr 9 10 std::shared_ptr<test> ptr_test2 = std::make_shared<test>(); 11 test* pTest2 = ptr_test...
std::shared_ptr<> 转指针 std::shared_ptr<> 是C++标准库中的一个智能指针,用于自动管理具有引用计数的动态分配的对象。它确保当没有任何 std::shared_ptr 指向对象时,对象会被自动删除。从 std::shared_ptr<> 获取原始指针(即裸指针)是一个常见操作,但需要注意避免悬空指针等问题。
std::shared_ptr<test> ptr_test = std::shared_ptr<test>(pTest);//普通指针转shared_ptr std::shared_ptr<test> ptr_test2 = std::make_shared<test>(); test* pTest2 = ptr_test2.get();//shared_ptr转普通指针
空指针对象构造 shared_ptr实例化的时候可以不指向任何对象,此时该shared_ptr为“空”就像是空指针一样...
(2)原始指针转 std::shared_ptr(不推荐) 如果已经有了一个原始指针,并且想要将其转换为std::shared_ptr,可以直接用原始指针构造std::shared_ptr。但这种做法需要谨慎,因为如果我们用同一个原始指针创建了多个std::shared_ptr,那么每个std::shared_ptr都会认为自己是唯一拥有该对象的智能指针,这将导致多次删除同一...
一、shared_ptr认知及陷阱 shared_ptr的类型转换不能使用一般的static_cast,这种方式进行的转换会导致转换后的指针无法再被shared_ptr对象正确的管理。应该使用专门用于shared_ptr类型转换的 static_pointer_cast<T>() , const_pointer_cast<T>() 和dynamic_pointer_cast<T>()。
std::shared_ptr<int>sp=std::make_shared<int>(10)int*pRaw=sp.get(); 但取出的原始指针,可能被释放,因此使用这个指针是不安全的,如在不同线程中,应该对该指针做加锁保护,或者以weak_ptr取代原始指针,例:https://www.jianshu.com/p/661b79cde7c7...
std::shared_ptr<Data> Ptr(new Data); //智能指针出了作用域就会被释放,引用计数减一 } cout<<"普通指针:"<<endl; Data* ptr = new Data; delete ptr; return 0; } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
std::shared_ptr 可以通过 get() 方法来获取原始指针,通过 reset() 来减少一个引用计数, 并通过use_count()来查看一个对象的引用计数。例如: auto pointer = std::make_shared<int>(10); auto pointer2 = pointer; // 引用计数+1 auto pointer3 = pointer; // 引用计数+1 ...