std::threadt2(thread_func, shared_int); t1.join(); t2.join(); }// 作用域结束,shared_int 被自动释放 在这个例子中,shared_int在两个线程之间共享,std::shared_ptr自动管理引用计数,并确保在多线程环境下引用计数的更新是安全的,避免了计数错误和资源释放问题。 注意事项:虽然std::shared_ptr确保了引...
auto pointer = std::make_shared<int>(10); auto pointer2 = pointer; // 引用计数+1 auto pointer3 = pointer; // 引用计数+1 int *p = pointer.get(); // 这样不会增加引用计数 std::cout << "pointer.use_count() = " << pointer.use_count() << std::endl; // 3 std::cout << "...
与传统指针不同,std::shared_ptr 自动管理内存,并在不再使用时自动释放对象,以避免内存泄漏。它是一种共享所有权的智能指针,即可以让多个 std::shared_ptr 指向同一个对象,并且会记录有多少个 std::shared_ptr 拥有该对象。 使用方法 #include <memory> #include <iostream> int main() { std::shared_ptr...
#include <iostream> #include <memory> // 需要包含此头文件 #include <vector> void example() { // 创建一个 std::shared_ptr 管理动态分配的 int 对象 std::shared_ptr<int> ptr1 = std::make_shared<int>(10); // 使用智能指针 std::cout << "Value: " << *ptr1 << std::endl; // ...
std::shared_ptr<int> ptr = std::make_shared<int>(42); 复制代码 使用shared_ptr对象:可以像使用原始指针一样使用shared_ptr对象,例如: *ptr = 10; int value = *ptr; 复制代码 共享指针:将shared_ptr对象传递给其他函数或对象时,shared_ptr对象会自动管理内存,确保在不再需要时自动释放内存。 避免循...
(1)如果从std::shared_ptr获取原始指针(通过.get()方法),然后继续使用这个原始指针,即使所有std::shared_ptr都已释放资源,原始指针仍然存在,但它指向的对象已经被销毁。原始指针就变成了悬空指针。 std::shared_ptr<int> sp(new int(42)); int* rawPtr = sp.get(); // 获取原始指针 ...
int Add(int a, int b);};int A::Add(int a, int b){returna + b;}intmain(){//std::shared_ptr<A>a=make_shared<A>();std::shared_ptr<A>a=std::shared_ptr<A>(new A());int res=a->Add(1,2);cout<<res<<endl;}
std::shared_ptr<int> p(new int(5)); AI 代码解读 在上述代码中,new int(5)是一个原始指针,被std::shared_ptr构造函数封装。在口语交流中,我们可以将其解释为 “Instantiate a shared_ptr that wraps a raw pointer to an integer initialized to 5.”(实例化一个封装了指向初始化为5的整数的原始指针...
在C++中,std::shared_ptr是一种智能指针,用于管理动态分配的内存。它允许多个shared_ptr共享同一块内存,避免了内存泄漏和悬空指针的问题。 使用std::shared_ptr的基本用法是创建一个shared_ptr对象,将其指向动态分配的内存,并在不需要使用该内存时释放它。例如: #include <memory> int main() { // 创建一个...
std::shared_ptr<int>sp=std::make_shared<int>(10)int*pRaw=sp.get(); 但取出的原始指针,可能被释放,因此使用这个指针是不安全的,如在不同线程中,应该对该指针做加锁保护,或者以weak_ptr取代原始指针,例:https://www.jianshu.com/p/661b79cde7c7...