智能指针shared_ptr简介及小例子

shared_ptr是一种智能指针,用于处理动态分配的对象。它提供了一种引用计数的机制,当没有任何其他shared_ptr指向一个对象时,该对象将被自动删除。

shared_ptr的作用类似于常规指针,但有一些额外的功能。它能够记录有多少个shared_ptr共享同一个对象,这是通过引用计数实现的。当创建一个新的shared_ptr指向一个对象时,引用计数会增加;当一个shared_ptr被销毁或重置时,引用计数会减少;当引用计数为0时,该对象的内存将被自动释放。

shared_ptr是线程安全的,多个线程可以共享同一个shared_ptr对象,而不会导致数据竞争或不一致的状态。然而,如果多个shared_ptr指向同一个对象,并且这些shared_ptr在多个线程中被修改或销毁,则需要进行适当的同步以确保数据的一致性和正确性。

下面是一个简单的示例,展示了如何使用shared_ptr

#include   
#include   
  
class MyClass {  
public:  
    MyClass(int value) : value_(value) {}  
    void printValue() { std::cout << value_ << std::endl; }  
private:  
    int value_;  
};  
  
int main() {  
    std::shared_ptr ptr1 = std::make_shared(42);  
    std::shared_ptr ptr2 = ptr1;  
  
    ptr1->printValue();  // Output: 42  
    ptr2->printValue();  // Output: 42  
  
    ptr2.reset();  
  
    ptr1->printValue();  // Output: 42  
  
    ptr1.reset();  
  
    // At this point, the object pointed to by ptr1 and ptr2 is deleted.  
  
    return 0;  
}

在上面的示例中,我们创建了两个shared_ptr,它们指向同一个MyClass对象。当我们使用printValue()方法时,可以看到输出是42。然后,我们销毁了ptr2,但因为还有ptr1指向该对象,所以该对象不会被删除。最后,我们销毁了ptr1,此时引用计数变为0,该对象被自动删除。

水平有限,有问题随时交流~

欢迎一键三连!

你可能感兴趣的:(Cpp,c++,开发语言)