共享指针和共享引用有什么区别
时间: 2023-08-31 19:06:40 浏览: 153
指针和引用的区别
共享指针和共享引用都是用于解决资源管理的问题,但它们有一些区别。
共享指针是通过std::shared_ptr<T>来实现的,它是一个模板类,用于管理一个类型为T的对象。当一个std::shared_ptr<T>对象被创建时,它会创建一个计数器来记录有多少个std::shared_ptr<T>指向同一个对象。每当一个新的std::shared_ptr<T>指向对象时,计数器会加1,当std::shared_ptr<T>被销毁时,计数器会减1。当计数器为0时,对象会被自动销毁。这个过程中,所有指向同一个对象的std::shared_ptr<T>都会被通知该对象的状态。
共享引用是通过std::shared_ptr<T>&来实现的。它也是一个模板类,用于管理一个类型为T的对象。与共享指针不同的是,共享引用并不拥有对象所有权,它只是指向一个已经存在的std::shared_ptr<T>对象。当一个std::shared_ptr<T>对象被创建时,它会创建一个计数器来记录有多少个std::shared_ptr<T>&指向同一个对象。每当一个新的std::shared_ptr<T>&指向对象时,计数器会加1,当std::shared_ptr<T>&被销毁时,计数器会减1。当计数器为0时,对象不会被销毁,因为它仍然被std::shared_ptr<T>指向。这个过程中,所有指向同一个对象的std::shared_ptr<T>&都会被通知该对象的状态。
因此,共享指针和共享引用的主要区别在于所有权的管理方式。共享指针拥有对象的所有权,可以控制对象的生命周期,而共享引用只是指向一个已经存在的对象,不拥有对象的所有权。
阅读全文